2010-10-27 75 views
0

我想從命令行運行一個文件。該文件是一個.class文件,並且是我在Netbeans中編譯的一個更大的項目的一部分。我瀏覽到.class文件並運行你可以從終端輸出一個IDE運行.class文件

的Java MyFile的

而且我得到了:

Exception in thread "main" java.lang.NoClassDefFoundError: PersonTest/class 
Caused by: java.lang.ClassNotFoundException: PersonTest.class 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 

Could not find the main class: PersonTest.class. Program will exit 

請告訴我與呢? (我應該提到,我正在運行的Ubuntu)

+0

的NoClassDefFoundError - 和什麼嗎?它是否抱怨MyFile或另一個「從屬」類? – KevinDTimm 2010-10-27 14:29:37

+0

繼承人完整的錯誤線程「main」中的異常java.lang.NoClassDefFoundError:PersonTest/class 引發:java.lang.ClassNotFoundException:PersonTest.class \t at java.net.URLClassLoader $ 1.run(URLClassLoader.java:217 ) \t在java.security.AccessController.doPrivileged(本機方法) \t在java.net.URLClassLoader.findClass(URLClassLoader.java:205) \t在java.lang.ClassLoader.loadClass(ClassLoader.java:321) \t at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:294) \t at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 找不到main cla ss:PersonTest.class。程序將退出 – Bobby 2010-10-27 14:31:31

+1

您是否設置了類路徑? – 2010-10-27 14:43:38

回答

1

你需要檢查這個有用的鏈接java - the Java application launcher

By default, the first non-option argument is the name of the class to be invoked. A fully-qualified class name should be used

所以,你必須寫出該類的全限定名稱(這包括包名稱)。

因此,執行你的命令,以正確的方式是這樣的(從根目錄在您的類文件存儲):

> java my.package.MyFile 

此外,請務必在類路徑中的所有所需的依賴( - cp)參數(檢查引用的鏈接)。

UPDATE:爲包括類路徑設定例:

java -classpath C:\MyProject\classes;C:\MyProject\lib\utility.jar my.package.MyFile 

由此,Java運行時將用於在C類查詢:\ MyProject的\ classes目錄,並在C:\ MyProject的\ lib \ utility.jar JAR文件。你不僅需要你的類的直接依賴,還需要引用文件(整棵樹)所需的依賴。

+0

試過,雖然 – Bobby 2010-10-27 14:37:35

+0

得到了類似的錯誤你有沒有從根類目錄運行它dir?並在類路徑中設置依賴關係? – 2010-10-27 14:39:38

+0

因此,如果此文件導入4個其他文件,那麼我需要將路徑傳遞給這4個文件? – Bobby 2010-10-27 14:46:24

0

是的,你可以,他們是由一個java編譯器編譯。如果你有正確版本的jvm(通常其他版本也可以),它可以運行。有關您的錯誤的信息不足以說明發生了什麼問題。 你可能是在錯誤的文件夾,輸入了錯誤的類名,用在你的代碼的類不能被發現,等

0

除非你的類是完全獨立的(即只引用java.lang類,如String),你需要其他類/ JAR文件添加到類路徑,當你調用Java。

NoClassDefFoundError(它通常按照方式聲明類的名稱,並且始終包含一個堆棧跟蹤)表示在編譯類時可用的外部類在運行時在類路徑中不可用。

編輯基礎上更新:

你沒有正確地調用你的過程。您不需要附加文件的.class後綴 - 這樣做可以使Java在子包中查找文件類class。 (你說你跑java MyFile。這是騙人的,你實際上跑java PersonTest.class。如果你注意到一開始,它會讓人們更容易回答這個問題!)

1

的答案似乎是在這一行:

Exception in thread "main" java.lang.NoClassDefFoundError: PersonTest/class 

這意味着你沒有鍵入:

java MyFile 

如你在原來的職位說,你輸入

java PersonTest.class 

你應該輸入

java PersonTest 
0

就考慮這個例子

說我已經有一個文件夾src和我在記事本中寫道

package test.oye; 

class testclass { 
static public void main (String [] args) 
{ 
int a=3; 
System.out.println(a); 
} 
} 

那麼什麼去src文件夾,你,你自己創建一個文件夾命名爲測試和裏面oye。然後把你的.java文件放進去。然後cd src/test/oye只(在命令提示符或終端)。從那裏本身

javac testclass.java 
cd src 
java test.oye.testclass 

這將肯定工作。

如果您不想在其中放入.java文件,那麼只需編譯.java文件並獲取.class文件。 現在創建測試文件夾,然後在裏面輸入...。並將.class文件放入其中...。

現在回到SRC ......然後根據終端類型IDE

java test.oye.testclass; 
0

,運行Android時,他們需要在DEX格式的類。

嘗試:

dx --dex --output=practice.jar practice.class

然後使用這個運行:

java -jar practice.jar practice

相關問題