我收到错误
线程“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 /游戏”
JAVA_HOME = “/ usr / lib中/ JVM / java的1.5.0-太阳/”
CLASSPATH = “:/ usr / lib中/ JVM / java的1.5.0-太阳/ lib中”
并在我输入set命令时出现。在任何情况下,即使我使用
手动设置类路径sudo java -cp。 myfirstjavaprog.class
我得到了同样的错误。我还应该在哪儿看?这必须是配置问题。
非常感谢
答案 0 :(得分:6)
你想从最后删除.class。只需输入...
java -cp . myfirstjavaprog
答案 1 :(得分:5)
我强烈建议删除CLASSPATH环境变量,或者至少将JRE / JDK从中删除。
除非另有说明,否则 "."
隐含在类路径中。关于Java 1.3,Java已经足够聪明,可以根据javac / java可执行文件的执行路径找到自己的运行时和库。从那以后,如果不是完全错误的话,在类路径中指定那些是多余的。当然.../lib
是不正确的,因为那里只有罐子,没有类,如果它们没有被单独和明确地命名,那么它们就不会从类路径中被拾取。
现代javas非常聪明,只要站在类路径的根目录下就可以输入java <classname>
,它就是Just Work™。
答案 2 :(得分:1)
不,我认为CLASSPATH环境变量被忽略了。
正确的方法是在编译和运行时使用-classpath选项。为每个项目设置它。你眼前的证据告诉你它就是这样。
为什么忽略CLASSPATH?有几个原因:
答案 3 :(得分:1)
你正在搅拌苹果和橘子。 命令行上的原始java或javac调用需要一个类路径来知道它可以访问其类的位置。当你运行
java -cp pathelement1:pathelement2... MyClass
你给java提供了查找runnable类的地方列表。它不会在任何其他地方看,包括“。”,除非你告诉它。所以除非你运行
,否则“CLASSPATH”对你没有帮助java -cp $CLASSPATH MyClass
另一方面,它只是一个不得不重新键入类路径的快捷方式。
许多程序都配置为使用JAVA_HOME,但最终运行java程序只需要一个配置的类路径和java的路径(它们通过JAVA_HOME变量找到它,所以你仍然需要它来处理像ant这样的东西,但它仍然是概念上的只是一个捷径。)
您的PATH是系统查找二进制文件的路径。如果java不在您的路径上(键入“哪个java”,它将显示您的路径中有哪个,如果有的话)运行/ full / path / to / java与仅运行“java”并拥有系统相同在PATH变量中找到二进制文件。
答案 4 :(得分:1)
使用
sudo update-java-alternatives -s java-6-openjdk
它设置了很多类路径。
答案 5 :(得分:0)
用于设置java_home变量,这里有说明。
http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html
和
类路径可以类似地设置
答案 6 :(得分:0)
我强烈建议您花一些时间查看Sun教程。它会帮助你后来的阶级路径是臭名昭着的麻烦制造者。
答案 7 :(得分:0)
好的我在错误的地方寻找问题。事实证明,Java很好,我是两个不同问题得到同样错误的受害者。
我原本试图运行一个从Java网站获得的swing示例,但我没有注意到它有一个包定义。我已经设置了正确的文件夹结构,现在运行正常。
当我尝试运行HelloWorld示例时,我意外地包含了.class扩展名。
这两个问题都给了我ClassNotFound错误。
非常感谢你的帮助。