簡體   English   中英

Java不會在終端java.lang.NoClassDefFoundError中運行程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM