我收到错误
线程“main”中的exceptionjava.lang.NoClassDefFoundError:
当我尝试在Ubuntu上运行一个编译的类。 我正在使用一个非常简单的Helloworld示例,并且互联网上已经存在的数百万个响应表明我的CLASSPATH和JAVA_HOMEvariables被错误地设置了。
不过,我已经编辑了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命令时,它们就会出现。 在任何情况下,即使我手动设置类path使用
sudo java -cp。 myfirstjavaprog.class
我犯了同样的错误。 我应该在哪里看? 这必须是一个configuration问题。
非常感谢
你想从最后删除.class。 只要输入…
java -cp . myfirstjavaprog
我强烈建议摆脱CLASSPATH环境变量,或者至少把你的JRE / JDK带出来。
"."
除非另外指定,否则都隐含在类路径中。 而从Java 1.3开始,Java就足够聪明,可以根据javac / java可执行文件的执行路径找到自己的运行库和库。 从那以后,如果不是完全错误的话,在类路径中指定它们是多余的。 当然.../lib
是不正确的,因为那里只有jar,没有类,如果没有单独和明确的命名,那么这些类不会从classpath中拾取。
现代的javas足够聪明,当你站在类路径的根目录下时,你可以直接输入java <classname>
,它将会Just Work™。
你正在混合苹果和橘子。 命令行上的原始java或javac调用需要一个类路径来知道它可以访问其类的位置。 当你跑步
java -cp pathelement1:pathelement2... MyClass
你给java的地方列表来找到可运行的类。 除非你告诉它,否则它不会在其他地方看到,包括“。”。 所以“CLASSPATH”不会帮助你,除非你运行
java -cp $CLASSPATH MyClass
换句话说,它只是一个不断重新输入类路径的捷径。
很多程序都被配置为使用JAVA_HOME,但是最终运行的java程序只需要一个配置好的类路径和java路径(它们通过JAVA_HOME变量找到它,所以你仍然需要它用于像ant这样的东西,但是它的概念上只是一个捷径以及)。
您的PATH是系统查找二进制文件的路径。 如果java不在你的路径上(输入“which java”,它会告诉你哪一个,如果有的话,java是在你的路径上)running / full / path / to / java与刚刚运行“java”在PATH变量中找到二进制文件。
不,我认为这是CLASSPATH环境变量被忽略。
正确的做法是在编译和运行时使用-classpath选项。 为每个项目设置它。 你眼前的证据告诉你这是事实。
为什么忽略CLASSPATH? 几个原因:
使用
sudo update-java-alternatives -s java-6-openjdk
它设置了很多classpath的东西。
用于设置java_home变量,这里是说明。
http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html
和
类路径可以类似地设置
我强烈建议你花一些时间看Sun教程。 它会帮助你后来的班级路线是臭名昭着的麻烦制造者。
好的,我在错误的地方寻找问题。 事实证明,Java是好的,我是两个单独的问题得到同样的错误的受害者。
我原本试图运行一个从Java网站获得的swing例子,但是我没有注意到它有一个包的定义。 我已经建立了正确的文件夹结构,现在运行良好。
当我试图运行HelloWorld示例时,我不小心包含了.class扩展名。
这两个问题都给了我ClassNotFound错误。
非常感谢您的帮助。