Java不会在终端java.lang.NoClassDefFoundError中运行程序

时间:2012-01-24 21:04:06

标签: java debian

我正在关注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   线程“main”中的异常java.lang.NoClassDefFoundError:RandomSeq(错误名称:randomSeq / RandomSeq)       at java.lang.ClassLoader.defineClass1(Native Method)       在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)       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:197)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:190)       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)       在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)   找不到主类:RandomSeq。程序将退出。

我尝试更新/etc/profile以在PATH变量中包含java-6-sun

我不确定,从这里尝试一下。

3 个答案:

答案 0 :(得分:2)

显然,您正在尝试从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

答案 1 :(得分:1)

看起来你的班级有一个包

package randomSeq;

public class RandomSeq {

如果是这样,那么当它启动时,它应该位于 randomSeq 文件夹中,该文件夹的根目录应该在你的类路径中,并且必须在调用时指定包。

因此,如果您的.class文件位于bin / randomSeq中,那么您可以使用 java -cp bin randomSeq.RandomSeq 21

运行它

答案 2 :(得分:0)

不要打扰参数,因为这会产生运行时空指针异常 问题是你的类路径。

在运行java RandomSeq的目录中创建一个列表(ls或dir)。 你有.class file吗?如果没有先运行javac RandomSeq.java来生成类文件