三个程序分别如下:MainClass.java:package MyPackage;
public  class MainClass
{
int i=10;
public MainClass()
{
   System.out.println(i);
}
public static void main(String args[])
{
new MainClass();
}
}MainSubClass.java:package MyPackage;
public class MainSubClass extends MainClass
{
public static void main(String args[])
{  
}
}
SamePackage.java:import MainPackage.*;//就是这里,编译通不过,写成import MyPackage.MainSubClass;就通过了,大家帮忙分析一下这是什么原因呀?
public  class SamePackage
{
public static void main(String args[])
{
MainSubClass msc=new MainSubClass();
}
}错误信息:
\JAVA\SamePackage.java:6: 无法访问 MainSubClass
错误的类文件: E:\JAVA\MainSubClass.java
文件不包含类 MainSubClass
请删除该文件或确保该文件位于正确的类路径子目录中。
                MainSubClass msc=new MainSubClass();
                ^
1 错误
我的环境变量:
classpath:   .;C:\Program Files\Java\jdk1.5.0_06\lib
path:   C:\Program Files\Java\jdk1.5.0_06\binMainClass.class 和 MainSubClass.class 都在 E:\JAVA\MainPackage中,如果我把MainClass.java和MainSubClass.java也放到E:\JAVA\MainPackage中,那么import MyPackage.*;就通过了,谁知道这是怎么回事吗?感激不尽!!!

解决方案 »

  1.   

    楼主的 import MainPackage.*;是import MyPackage.*;import MyPackage.MainSubClass;//是import MyPackage.MainSubClass;
    补充一下,把这三个文件同两个.class文件都放到了MyPackage
      

  2.   

    哎呀!!!~~~我又弄了个错的,我重写一次:
    三个程序分别如下:MainClass.java:package MainPackage;
    public  class MainClass
    {
    int i=10;
    public MainClass()
    {
       System.out.println(i);
    }
    public static void main(String args[])
    {
    new MainClass();
    }
    }MainSubClass.java:package MainPackage;
    public class MainSubClass extends MainClass
    {
    public static void main(String args[])
    {  
    }
    }
    SamePackage.java:import MainPackage.*;//就是这里,编译通不过,写成import MainPackage.MainSubClass;就通过了,大家帮忙分析一下这是什么原因呀?
    public  class SamePackage
    {
    public static void main(String args[])
    {
    MainSubClass msc=new MainSubClass();
    }
    }错误信息:
    \JAVA\SamePackage.java:6: 无法访问 MainSubClass
    错误的类文件: E:\JAVA\MainSubClass.java
    文件不包含类 MainSubClass
    请删除该文件或确保该文件位于正确的类路径子目录中。
                    MainSubClass msc=new MainSubClass();
                    ^
    1 错误我的环境变量:
    classpath:   .;C:\Program Files\Java\jdk1.5.0_06\lib
    path:   C:\Program Files\Java\jdk1.5.0_06\binMainClass.class 和 MainSubClass.class 都在 E:\JAVA\MainPackage中,如果我把MainClass.java和MainSubClass.java也放到E:\JAVA\MainPackage中,那么import MyPackage.*;就通过了,谁知道这是怎么回事吗?感激不尽!!!
      

  3.   

    我对楼主的代码多次试验后感觉是这样的:
    因为JAVA编译器考虑的特定位置作为包层次的根被CLASSPATH控制,在没有包参与的时候我们保存的所有类到同样未命名的缺省包中,这样做允许只要通过在命令行键入类名编译源文件和运行JAVA解释器,就可以得到结果.这是因为缺省的当前工作目录通常在CLASSPATH环境变量中为JAVA运行时间缺省定义.所以当楼主的SamePackage.java编译的时候,编译器在当前目录中搜索MainSubClass类,但是当前目录无法找到MainSubClass类文件,只找到MainSubClass.java源文件,所以会报错说错误的类文件.只要把同一目录下的源文件删除或在引入包中的具体的类就可以.只能所JAVA的规定比较死板吧.以上是我个人的理解,本人还是菜鸟,若有不对,请各位高手指正
      

  4.   

    说的明白点就是JAVA编译器认为当前目录下的这个MainSubClass.java源文件应该是MainSubClass.class类文件,但是后缀名不对,所以报错.
      

  5.   

    但是好像不是每台机器上都报错,像jobs002(赏花赏月赏春光,The More you know,The More you forget.....) 在他的机器上就正常编译了!
      

  6.   

    不过我没有把两个java文件放在Package文件夹下面.........
      

  7.   

    不妨在一个文件夹下, .*找不到的
    -------------------------那为什么  jobs002(赏花赏月赏春光,The More you know,The More you forg) 没放到一个文件夹下,.*也找到了呢?
      

  8.   

    jobs002(赏花赏月赏春光,The More you know,The More you forg) :你说说你的源文件和.class文件都分别放在什么位置上?
      

  9.   

    冲动是魔鬼,冲动是魔鬼...................,放在了D:\JavaWork\下面
      

  10.   

    是不是编译的时候当前目录不对,建议楼主使用工具eclipse
      

  11.   

    是不是编译的时候当前目录不对,建议楼主使用工具eclipse
    -------你这里的当前目录是不是就是指的源文件存放的文件夹?那要怎么看当前目录对不对呢?
      

  12.   

    我试过后是这样的,也就是说你要引用的class类文件如果不在当前目录中,那么当前目录下就不能有和你要引用的类文件同名的源文件.所以你只要把当前目录下的MainSubClass.java源文件删除也能正常编译
      

  13.   

    我试过后是这样的,也就是说你要引用的class类文件如果不在当前目录中,那么当前目录下就不能有和你要引用的类文件同名的源文件.所以你只要把当前目录下的MainSubClass.java源文件删除也能正常编译
    -----------------------我也这样试过了,确实是能正常编译,可是我困惑的是为什么在有的人的机器上不用这样就能通过编译了呢???就比如jobs002(赏花赏月赏春光,The More you know,The More you forg)他也是在JCreator 3.00 pro下编译的,他既没把源文件放到包中,也没把当前目录下的.java文件删除,可是却通过编译了,你说怪不怪??? 我就不明白到底是什么问题???
      

  14.   

    HOHO~~~,那我也不清楚了,本人也是刚学不久,我想还是classpath的原因吧,期待高手的回答.