我在Arch Linux上,我刚刚安装了JRE和JDK,并且所有正确的bin文件(javac和java)都在/ opt / java / bin /
中我只是编译了一个标准的hello世界,并使用运行javac ./hello.java
的javac编译它并创建了一个类。
现在我的问题是运行它。我运行java ./helloworld.class并且它给了我一个错误,即使我指向java的文件是不存在的:
Exception in thread "main" java.lang.NoClassDefFoundError: //helloworld/class
Caused by: java.lang.ClassNotFoundException: ..helloworld.class
(..omitted for clarity..)
Could not find the main class: ./helloworld.class. Program will exit.
你会注意到错误的第一行,它会引导路径//helloworld/class
当我向java提供一个绝对路径时,即java /home/foo/helloworld.class
它会给出相同的错误,但在第一行中用/
替换路径.
,再次使用。
你认为有什么不对?我真的不知道为什么会这样做..
答案 0 :(得分:3)
当你运行java时,你只需要传递完全限定的类名(包括包),而不是文件名。
java helloworld
将寻找helloworld.class。
java helloworld.class
将寻找helloworld / class.class
答案 1 :(得分:1)
您不运行文件
# java file.class
你把它作为
# javac PATH/file.java
# java PATH/file
使用JAVA命令时不要添加.class。
答案 2 :(得分:1)
实际上你应该像这样编译它
javac helloword.java
运行程序
java helloword
答案 3 :(得分:0)
还有一件事:添加命令行选项“-classpath”。或者它是短版“-cp。”,即你的命令行应如下所示: java -cp。的HelloWorld
这是因为您的班级位于当前目录中。除此以外 ”。”应该被可以找到类的路径替换。