被 classpath 和 package 搅昏了头 @_@

mattus_zhao 2004-01-16 10:18:34
一个很简单的程序:
------------------------------------
package c05.dessert;
public class Cookie {
public Cookie() {
System.out.println("Cookie constructor");
}
public static void main(String[] args) {
System.out.println("Hello Cookie");
Cookie ck = new Cookie();
}
}
------------------------------------
文件 Cookie.java 位于 E:\Test\TIJ\c05\dessert 目录下面,在 Dos 下进入到这个目录,然后 javac Cookie.java 通过,但是执行 java Cookie 却出错了:
------------------------------------
java.lang.NoClassDefFoundError: Cookie (wrong name: c05/dessert/Cookie)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Exception in thread "main"
------------------------------------
如果运行 java -classpath E:\Test\TIJ Cookie 的话,错误信息变为
Exception in thread "main" java.lang.NoClassDefFoundError: Cookie
我在 Windows 下的用户变量处设置了 CLASSPATH=.;E:\Test\TIJ;C:\j2sdk1.4.2_03\lib\tools.jar;C:\j2sdk1.4.2_03\lib\dt.jar


...全文
72 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger_wkh52741 2004-01-18
  • 打赏
  • 举报
回复
搜索结果:
http://expert.csdn.net/Expert/topic/2592/2592670.xml?temp=.2074091
ustbzhangwei 2004-01-18
  • 打赏
  • 举报
回复
Cookie.java 位于 某个 目录下面,在 Dos 下进入到这个目录,然后

编译javac Cookie.java
运行java c05.dessert.Cookie

mattus_zhao 2004-01-18
  • 打赏
  • 举报
回复
包和文件夹应该是不同的概念吧?
mattus_zhao 2004-01-18
  • 打赏
  • 举报
回复
>带package的类,在编译时,如果包不存在,会创建包,
>我觉得你是手工创建了包,也就是文件夹,那你应该把Cookie.java放在E:\Test\TIJ目录下
这是什么意思?并不会自动创建文件夹呀。
ustbzhangwei 2004-01-17
  • 打赏
  • 举报
回复
Cookie.java 位于 E:\Test\TIJ\c05\dessert 目录下面,在 Dos 下进入到这个目录,然后


编译javac Cookie.java ,会在这里生成子目录c05\dessert,即E:\Test\TIJ\c05\dessert\c05\dessert
运行java c05.dessert.Cookie

带package的类,在编译时,如果包不存在,会创建包,
我觉得你是手工创建了包,也就是文件夹,那你应该把Cookie.java放在E:\Test\TIJ目录下
编译javac Cookie.java
运行java c05.dessert.Cookie

Leemaasn 2004-01-17
  • 打赏
  • 举报
回复
不要太迷信
CLASSPATH。。。。

能用工具还是用工具吧。。。
用JCreator或JBuilder也就可以了。

学习,不是把力气花在设置CLASSPATH上的。
楼主明白了吗?
xl5550 2004-01-17
  • 打赏
  • 举报
回复
用jcreator
slash5437 2004-01-17
  • 打赏
  • 举报
回复
你在环境变量中path中加入
C:\j2sdk1.4.2_03\bin
试一试
老土豆T 2004-01-17
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2592/2592670.xml?temp=.2074091
mattus_zhao 2004-01-17
  • 打赏
  • 举报
回复
但是我已经在 CLASSPATH 路径里面添加了 E:\Test\TIJ 了,然后在 Dos 下面
E:\Test\TIJ\c05\dessert>java Cookie
应该是可以运行的呀,但是 Java 还是报错,不明白。
老土豆T 2004-01-17
  • 打赏
  • 举报
回复
如果不能保证的话,

可以使用一些高级的IDE,,比如Eclipse ,JBuilder.把这些添加到程序运行所需要的classpath中去的话,就不会出现这些问题。
wlnet 2004-01-17
  • 打赏
  • 举报
回复
有包名的calss都应该在包名的顶级目录里执行(java 包.classname)!
要不就打包成jar就方便些。
lihui98 2004-01-17
  • 打赏
  • 举报
回复
ustbzhangwei(wei) 的方法可行,测试通过
JJYW 2004-01-17
  • 打赏
  • 举报
回复
例如你的Cookie.java在Test目录下。
那么Cookie.class就应该放在test\c05\dessert目录下。
然后在test目录下运行就行了:java c05.dessert.Cookie
其实c05和dessert代表每一层目录。
guoxyj 2004-01-16
  • 打赏
  • 举报
回复
package就是路径
package c05.dessert;
c05一定要在你的path里定义
mattus_zhao 2004-01-16
  • 打赏
  • 举报
回复
我试过了,还是报错。
难道说我的 JDK 出问题了?
sukin 2004-01-16
  • 打赏
  • 举报
回复
It looks like something wrong with your package.
Can you try java -classpath E:\Test\TIJ\c05\dessert Cookie?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧