各位大虾:
我的源程序如下:
package pack1;class MyCircle
{
void show()
{
System.out.println("show() method is called.");
}
}class MyTest
{
public static void main(String args[])
{
MyCircle circle1=new MyCircle();
circle1.show();
}
}
把它保存在e:\Java\目录下,用javac MyCircle.java编译后,同一目录下出现MyCircle.class文件和MyTest.class文件,然后无论直接用java MyTest还是用java pack1.MyTest运行均出错.但是如果退到E:\目录下,用 javac pack1\MyCircle.java编译,再用java pack1.MyTest运行则正确,那位告诉我这是为什么啊???

解决方案 »

  1.   

    把它保存在e:\Java\目录下,用javac MyCircle.java编译后,同一目录下出现MyCircle.class文件和MyTest.class文件,然后无论直接用java MyTest还是用java pack1.MyTest运行均出错.这时候没有pack1目录(包)但是如果退到E:\目录下,用 javac pack1\MyCircle.java编译,再用java pack1.MyTest运行则正确,那位告诉我这是为什么啊???
    这个时候会产生pack1目录(包)
      

  2.   

    在你第一次编译的时候,编译器根本没有pach1包的概念,
    第二次才能正确确认包
      

  3.   

    包文件,包中的类文件,还有包含main的类文件层次结构如下:
    e:\java
         class MyTest.java
         pack1
              MyCircle.java
      

  4.   


    java的包结构和物理目录结构好像有着扯不断的关系阿〉但是如果退到E:\目录下,用 javac pack1\MyCircle.java编译,再用java pack1.MyTest运行则正
    〉确,那位告诉我这是为什么啊???
    这句话如果我没推错的话,可能搂住把java目录改名为pack1了 。
    运行正确的原因很简单,就是包结构阿,除了这个概念,还有一个,就是包结构阿,这应该是基础,最难的就是基础,多多交流。
      

  5.   

    这是因为你没有设置你的包的路径因为程序运行是需要找到你的包;这样你就必须提供你的包所在的路径
    就是直接在classpath里面添加这条路径;路径名只要到包所在路径的上一级目录;编译器会首先查找当前目录是否有所需要的包;所以当你直接在e:下运行时当然能行了
    因为你的包就在e:下;
      

  6.   

    fxltsbl(一剑封喉) 说的对,我的程序是放在E:\pack1下面的,写错了,不好意思!!
    看了各位的回复,我还是不很清楚啊?当我在jcreator中编译时,系统会在.java所在路径下再创建一个pack1文件夹,并将生成的两个.class文件放在这个e:\pack1\pack1下面.
    而当我在dos提示符下编译时:E:\>javac pack1\MyTest.java,生成的两个class文件与.java放在同一个目录下面,但是也必须退到上一级才能运行:E:\>java pack1.MyTest包与物理路径之间到底是什么关系啊?能否这样理解:不管.java和.class在哪里,反正总要到.class所在的上一层路径才能运行?哪位能给出一个详细的说明啊?我查了很多资料,但都讲的很简单啊.
      

  7.   

    楼主我的回复你看到了吗?
    包文件,包中的类文件,还有包含main的类文件层次结构如下:
    e:\java              ///java为你的工程文件名
         class MyTest.java   ////你的含main 类
         pack1                ////包名
              MyCircle.java    ////包中的类名,
    在ms——dos下你只要定位到java下就可以了
    在e:\java目录下就javac MyTest.java
                     java MyTest  就可以运行了! 
      

  8.   

    newmeteor(圆缘) :你说的正是我问的第一个问题:直接在pack1下不行啊!!只有退到上一级目录,再加上子文件夹名称才可以!!不信你试试 !!
      

  9.   

    路径不对,应该把程序放在pack1目录下
      

  10.   

    在进行编译的时候,直接采用javac MyCircle.java,不会把生成的.class文件放在你所设定的pack1这个文件夹下,除非你自己建立一个这样的文件夹,不过这样做很不方便使用java -d . MyCircle.java,在编译后能够生成与包名层次相对应的目录结构。这里执行的类名一定要是类的全名,即包括的包名的类名 java pack1.MyTest。设定的classpath的环境变量的值一定要指向顶层包名所对应的目录的父目录。比如这里的顶层包是pack1,所有classpath一定设定为pack1的上一级的路径。
      

  11.   

    //MyCircle.java
    package pack1;
    public class MyCircle {
    public void show() {
    // TODO: Add your code here
    System.out.println("show() method is called."); }
    }//MyTest.java
    import pack1.*;
     class MyTest {
    public static void main(String [] args) {
    // TODO: Add your code here
    MyCircle circle1=new MyCircle();
    circle1.show(); }
    }我已经调试过了,没有问题,你把对应的文件放到我前一张贴子的对应文件夹下就可以运行了!
      

  12.   

    编译器不能自动打包,当你用JAVAC编译的后并没有产生pack1包
    所以要javac pack1\MyCircle.java,这样才产生了pack1的包
      

  13.   

    回复人: XIAYINAMY(夏茵) ( ) 信誉:100  2005-5-17 17:48:26  得分: 0  
     
     
       
    newmeteor(圆缘) :你说的正是我问的第一个问题:直接在pack1下不行啊!!只有退到上一级目录,再加上子文件夹名称才可以!!不信你试试 !!
    ------------------------------------------------------------
    我估计是因为在你的MyTest.java 文件中的第一行没有倒入包的缘故!少import pack1.*;  
     
      

  14.   

    newmeteor(圆缘)  已经说得很详细了 
    ................