我正在学习 Princeton website 上的 Java 教程.
我正在运行 debian sqeeze 64bit
并且我已经安装了 Sun java 版本 6。
我可以使用终端和 Eclipse IDE 毫无问题地编译和运行基本的 hello world
程序。
问题是:
当我尝试编译和运行一个需要输入参数的程序时:
public class RandomSeq {
public static void main(String[] args) {
// command-line argument
int N = Integer.parseInt(args[0]);
// generate and print N numbers between 0 and 1
for (int i = 0; i < N; i++) {
System.out.println(Math.random());
}
}
}
我可以在 Eclipse 上运行它并输入一个整数参数,但是它在终端上不起作用。
我收到这个错误:
emes@debian:~/Documents/workspace/IOput/src/randomSeq$ java RandomSeq 21 Exception in thread "main" java.lang.NoClassDefFoundError: RandomSeq (wrong name: randomSeq/RandomSeq) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Could not find the main class: RandomSeq. Program will exit.
我已尝试更新 /etc/profile
以在 PATH 变量中包含 java-6-sun
。
我不确定,从这里开始尝试什么。
最佳答案
显然,您正在尝试从 Eclipse 项目的 src
文件夹运行您的程序。 src
代表“来源”。你程序的可执行版本(编译后的类)不在 src
中;它在 bin
中,代表“二进制”,即机器代码。
当使用命令行时,你应该首先编译你的程序:
javac MyClass.java
然后运行它:
java MyClass
但是请不要在 Eclipse 项目的目录结构中执行此操作,否则您将在此位置创建 Eclipse 不需要的其他文件(类文件)。
此外,您可能在包裹内。如果您在其包文件夹中,则无法运行类(class)。您需要位于包层次结构的顶层。
示例:假设您的类位于名为 mypackage
的包中。然后在 someFolder/mypackage/MyClass.java
中你会得到类似这样的东西:
package mypackage;
class MyClass {
...
}
编译代码后,您必须在 somefolder
中并发出 shell 命令:
java mypackage.MyClass
关于Java 不会在终端 java.lang.NoClassDefFoundError 中运行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8994125/