为什么单独运行加了package关键字的类不成功,但是用JCreater或者在其它类中引用(如类B中创建类A)运行就可成功?   如:CLASSPATH路径是:  F;\JAVA  
   //类A,A.class文件放在 F:\JAVA\com\laopin 下  
       package  com.laopin;  
       public  class  A{    
    public  static  void  main(String[]  args){  
                       System.out.println("I  am  A!");  
               }  
               public  void  print(){  
                       System.out.println("I  am  imported!");  
               }  
       }  
         
       //类B,放在 F:\JAVA 下  
  import  com.laopin.A;  
       public  class  B{  
               public  static  void  main(String[]  args){  
                       System.out.println("I  am  B,Import  A!");  
                       new  A().print();  
               }  
       }  
       编译类B,运行结果是:I  am  B,Import  A!  
                                                 I  am  imported!  
       单独运行A时,用JCreater运行成功:I  am  A!  
       但用java命令时,我在F:\JAVA\com\laopin下运行,以及在e:\盘下运行,都得到  
       如下的错误:  
       Exception  in  thread  "main"  java.lang.NoClassDefFoundError:  A                      (wrong  name:  com/laopin/A)  
               at  java.lang.ClassLoader.defineClass1(Native  Method)  
               at  java.lang.ClassLoader.defineClass(ClassLoader.java:620)  
               at  java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12  
4)  
               at  java.net.URLClassLoader.defineClass(URLClassLoader.java:260)  
               at  java.net.URLClassLoader.access$100(URLClassLoader.java:56)  
               at  java.net.URLClassLoader$1.run(URLClassLoader.java:195)  
               at  java.security.AccessController.doPrivileged(Native  Method)  
               at  java.net.URLClassLoader.findClass(URLClassLoader.java:188)  
               at  java.lang.ClassLoader.loadClass(ClassLoader.java:306)  
               at  sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)  
               at  java.lang.ClassLoader.loadClass(ClassLoader.java:251)  
               at  java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)  
 

解决方案 »

  1.   

    单独运行时,不要加 package  com.laopin;  这句.
      

  2.   

    在F:\JAVA下 
    编译javac B.java
    运行java B
      

  3.   

    这么说这种情况是正常的了,单独运行的时候注定了加就不行是吧
    那为什么用JCreator运行又成呢?
      

  4.   

    在F:\JAVA下
    编译javac com\laopin\A.java
    运行java com.laopin.A
      

  5.   

    单独运行时,不要加 package  com.laopin;  这句.
      

  6.   

    查了一下书,完整的类名是包括命名空间的,所以理论上就是javac com\laopin\A.java是对的了,试了一下,果然是raycome()回复的比较正确,不过还是谢谢大家的热心答复!