假设我编了3个类A\B\C,这三个类之间的调用关系是A调用B,B调用C,所以在进行引用的时候就出现了问题,它们的路径应该如何设置,包有应该如何安排。我的出错情况大致如下:
编译完成的BC两个类在同一路径下,它们包的名称与路径名称相同,环境变量也设置正确,A在它们的上一级路径。对A进行编译的时候没有错误,但是在执行A的时候提示:
Error:Error001
Detial:java.lang.ClassNotFoundException:
at java.lang.Class.XXX(Native Method)
at java.lang.Class.XXX(Class.java:140)
at MyPackage.B.XXXX(B.java:69)
at MyPackage.B.XXXX(B.java:92)
at MyPackage.B.XXXX(B.java:127)
at A.<init>(A.java:23)
at A.main(A.java:153)其中Error:Error001是打印出的我自定义的错误编号,该错误发生在B的一开始。期盼回答:)
编译完成的BC两个类在同一路径下,它们包的名称与路径名称相同,环境变量也设置正确,A在它们的上一级路径。对A进行编译的时候没有错误,但是在执行A的时候提示:
Error:Error001
Detial:java.lang.ClassNotFoundException:
at java.lang.Class.XXX(Native Method)
at java.lang.Class.XXX(Class.java:140)
at MyPackage.B.XXXX(B.java:69)
at MyPackage.B.XXXX(B.java:92)
at MyPackage.B.XXXX(B.java:127)
at A.<init>(A.java:23)
at A.main(A.java:153)其中Error:Error001是打印出的我自定义的错误编号,该错误发生在B的一开始。期盼回答:)
/p2/B.java
/C.javaB:package p1.p2;
C:package p1.p2;
A:package p1;
import p1.p2.*;运行:p> java p1.A
在B中第一行增加
package p1.p2;
C的第一行增加
package p1.p2;
A的第一行增加
package p1;
import p1.p2.*;p1文件夹下有A.java和p2文件夹
p2文件夹下有B.java和C.java
编译之后的class还是依照上面的路径存放
磁盘目录结构:
\CustomPackage\CustomUser.java
\p2\DB.java
\p2\IniFile.java这三个文件的包设置如下:
CustomUser.java
package CustomPackage;
import java.sql.*;
import java.text.SimpleDateFormat;
import CustomPackage.p2.*;DB.java
package CustomPackage.p2;IniFile.java
package CustomPackage.p2;以上配置应该和你们的写法相同,编译CustomUser.java也没有任何错误,都生成了.class文件,但是在命令行执行java CustomUser的结果如下:
Exception in thread "main" java.lang.NoClassDefFoundError: CustomUser (wrong name: CustomPackage/CustomUser)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:272)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)谢谢!
2、将路径转向你的类路径下,但不要进入到包下面
如你的类在D盘
D:/work/test/class/CustomPackage/CustomUser.class
而 CustomPackage 是你的包名,那么
d:\>cd D:/work/test/class
而不是
d:\>cd D:/work/test/class/CustomPackage
3、执行
D:\work\test\class>java CustomPackage.CustomUser
ps:建议你也用个工具,推荐eclipse,你就没这种烦恼了!