我收到了错误
线程“main”java.lang.NoClassDefFoundError中的异常:
当我尝试在Ubuntu上运行编译类时 . 我正在使用一个非常简单的Helloworld示例,并且互联网上已存在的数百万个响应表明我的CLASSPATH和JAVA_HOME变量设置不正确 .
但是,我已将etc / environment编辑为正确的文件夹以及当前文件夹:
PATH =“ . :/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games”JAVA_HOME =“/ usr / lib / jvm /java-1.5.0-sun/"CLASSPATH =“ . :/ usr / lib / jvm / java-1.5.0-sun / lib”
当我输入set命令时它们会出现 . 无论如何,即使我手动设置类路径也是如此
sudo java -cp . myfirstjavaprog.class
我犯了同样的错误 . 我还应该在哪儿看?这必须是配置问题 .
非常感谢
8 回答
你想从最后删除.class . 只需输入...
我强烈建议删除CLASSPATH环境变量,或至少从中取出JRE / JDK .
除非另有说明,否则
"."
隐含在类路径中 . 关于Java 1.3,Java已经足够聪明,可以根据javac / java可执行文件的执行路径找到自己的运行时和库 . 从那以后,在类路径中指定那些是多余的,如果不是完全错误的话 . 当然.../lib
是不正确的,因为那里只有 jar ,没有类,并且那些没有单独和明确命名的't picked up off the classpath if they' .现代javas足够聪明,只要站在类路径的根目录中就可以输入
java <classname>
,它就是Just Work™ .你正在混合苹果和橘子 . 命令行上的原始java或javac调用需要一个类路径来知道它可以访问其类的位置 . 当你跑步
你给java提供了查找可运行类的地方列表 . 它不会在任何其他地方看,包括“ . ”,除非你告诉它 . 所以除非你跑,否则“CLASSPATH”对你没有帮助
换句话说,它只是一个不断重新键入类路径的快捷方式 .
许多程序都配置为使用JAVA_HOME,但最终运行java程序只需要一个已配置的类路径和java的路径(它们通过JAVA_HOME变量找到它,所以你仍然需要它来处理像ant这样的东西,但它的'概念上只是一个捷径以及) .
PATH是系统查找二进制文件的路径 . 如果java不在你的路径上(键入“哪个java”,它将显示你的路径上有哪个java)运行/ full / path / to / java与运行“java”和拥有系统相同在PATH变量中找到二进制文件 .
不,我认为CLASSPATH环境变量被忽略了 .
正确的方法是在编译和运行时使用-classpath选项 . 为每个项目设置它 . 你眼前的证据告诉你它是如此 .
为什么忽略CLASSPATH?几个原因:
它's a Java 1.0 artifact that'失宠了 .
JVM无法保证您将其设置为环境变量 .
IDE有自己的要求,所以他们不依赖它 .
Java EE应用服务器有自己的要求,因此它们不依赖于它 .
每次都必须给出整条路径,因为每个项目可能都不同 . 一旦你超越了"Hello, World",你会发现自己编写脚本或使用像Ant和Maven这样的工具来帮助你为你的项目设置CLASSPATH .
使用
它设置了很多类路径的东西 .
设置java_home变量,这里有说明 .
http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html
和
classpath可以类似地设置
我强烈建议您花一些时间查看Sun教程 . 它会帮助你后来的阶级路径是臭名昭着的麻烦制造者 .
http://java.sun.com/docs/books/tutorial/getStarted/TOC.html
好的,我在错误的地方寻找问题 . 原来,Java很好,我是两个不同问题得到同样错误的受害者 .
我原本试图运行一个从Java网站获得的swing示例,但我没有注意到它有一个包定义 . 我已经设置了正确的文件夹结构,现在运行正常 .
当我试图运行HelloWorld示例时,我不小心包含了.class扩展名 .
这两个问题都给了我ClassNotFound错误 .
非常感谢您的帮助 .