[英]Java won't run program in terminal java.lang.NoClassDefFoundError
我正在跟踪Princeton网站上的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线程“ main”中的异常java.lang.NoClassDefFoundError:java.lang.ClassLoader.defineClass1(Native)上的RandomSeq(错误名称:randomSeq / RandomSeq)方法)在java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)在java.lang.ClassLoader.defineClass(ClassLoader.java:615)在java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)在java。 net.URLClassLoader.defineClass(URLClassLoader.java:283)在java.net.URLClassLoader.access $ 000(URLClassLoader.java:58)在java.net.URLClassLoader $ 1.run(URLClassLoader.java:197)在java.security.AccessController .doPrivileged(本机方法)(java.net.URLClassLoader.findClass(URLClassLoader.java:190),java.lang.ClassLoader.loadClass(ClassLoader.java:306),位于sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java) :301),位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)找不到主类:RandomSeq。 程序将会退出。
我试图更新/etc/profile
以将java-6-sun
在PATH变量中。
我不确定如何从这里尝试。
显然,您正在尝试从Eclipse项目的src
文件夹中运行程序。 src
代表“源”。 程序的可执行版本(编译的类)不在src
; 它在bin
,代表“二进制”,即机器代码。
使用命令行时,应首先编译程序:
javac MyClass.java
然后运行它:
java MyClass
但是请不要在Eclipse项目的目录结构中执行此操作,否则您将在此位置创建Eclipse不需要的其他文件(类文件)。
另外,也许您在包装内。 如果您在类的包文件夹中,则无法运行该类。 您需要处于程序包层次结构的顶层。
示例:假设您的类在名为mypackage
的包内。 然后在someFolder/mypackage/MyClass.java
您将看到类似以下内容的内容:
package mypackage;
class MyClass {
...
}
编译代码后,您必须在somefolder
并发出shell命令:
java mypackage.MyClass
看来您的班级有一个礼包
package randomSeq;
public class RandomSeq {
如果是这样,则在启动它时,它应该位于randomSeq文件夹中,并且该文件夹的根目录应该在您的类路径中,并且在调用时必须指定包。
因此,如果您的.class文件位于bin / randomSeq中,则可以使用java -cp bin randomSeq.RandomSeq 21运行它。
不要理会参数,因为这会给运行时空指针带来异常。
问题是您的类路径。
在运行Java RandomSeq的目录中列出一个列表(ls或dir)。 你在那里有一个.class file
。 如果没有运行javac RandomSeq.java
运行javac RandomSeq.java
来生成类文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.