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

标签 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 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/

相关文章:

java - Apache Solr 文件未建立索引或 "uploaded"

linux - Debian 内核头文件 3.15

Apache 目录索引显示文件,但不显示带有 mod_auth_openidc 的文件夹

python - 为 Ubuntu 发布

java - JPAContainer过滤器是什么样的?

java - Java开发者学习Flash AS3的方法?

java - 在 Java Apache POI 中更新现有的 Excel 文件

java - Spring Data MongoDB 4.0 事务支持

linux - 在自动启动中以 root 身份执行脚本

python - 如何在 Debian 服务器上升级 python?