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