2011-07-12 64 views
5

我試圖從命令promopt樣本Java應用程序,但我發現了以下錯誤:「找不到主類」

Exception in thread "main" java.lang.NoClassDefFoundError: com/badlogic/gdx/helloworld/HelloWorldDesktop 
Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.helloworld.HelloWorldDesktop 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     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: com.badlogic.gdx.helloworld.HelloWorldDesktop. Program will exit. 

我使用嘗試的命令和運行這個程序是:

java -cp .;gdx.jar;gdx-backend-jogl.jar com.badlogic.gdx.helloworld.HelloWorldDesktop 

所有相關文件都在當前工作目錄(的.java,的.class和.jar文件)

我用來建立.class文件的命令如下(有2個.java文件):

javac -cp gdx.jar;gdx-backend-jogl.jar HelloWorld.java HelloWorldDesktop.java 

再次,這是從同一個工作目錄下運行 - 的HelloWorldDesktop.java內容是(或多或少):

package com.badlogic.gdx.helloworld; 

public class HelloWorldDesktop { 
    public static void main (String[] argv) { 
     // Application 
    } 
} 

我試圖學習Java作爲一個C#開發人員,所以當我在編程概念方面有很強的背景時,整個java工具鏈目前完全讓我困惑。異常表明找不到類HelloWorldDesktop,但據我所知,我已經得到了正確的名稱,並且將正確的.jar文件添加到了類路徑中,因此Java應該能夠加載類。

爲什麼找不到HelloWorldDesktop

回答

7

右鍵 - 問題是,你有在當前目錄HelloWorldDesktop.class,而應該是在COM/badlogic/GDX/HelloWorld的

您可以使用javac命令解決這個問題 - 只需使用-d .告訴它來對待「。」作爲輸出的包根目錄。

通常你會想要通過包來組織你的源代碼,但對於這個「你好世界」測試它可能不值得。

+0

感謝的 - 無論是使用'-D .'用'javac'引起我的(未修改的)命令的工作 - 從一個更高的目錄中變更路徑運行也工作。我想知道爲什麼示例源代碼嵌套得如此之深,我從未想到源代碼的目錄結構足夠重要,無法執行。 – Justin

+0

嗯,我只是指出'-d .'讓編譯器爲你創建了一系列的子目錄。 – Justin

1

好吧,首先你需要編譯並運行使用兩種不同的工具

步驟1中的應用程序:它的javac.exe編譯.java文件到.class文件。 例如:的javac.exe ProgramFolder \ *的Java(其中ProgramFolder =文件系統目錄)

然後

步驟2:java.exe的,給作爲參數要運行包括路徑的應用程序,而是使用「\」作爲文件夾使用「。」和你的班級的名字 例如:ProgramFolder.ClassProgram

這將工作。如果您嘗試運行Java.exe ProgramFolder \ Program.class或只是ProgramFolder \ Program或進入類文件所在的文件夾,並且只執行Java.exe Program.class,它總是會給您找不到Main類錯誤。

看一看第2行這幅畫http://3.bp.blogspot.com/-FO4Hmg9LrI0/Td7FoSIi_XI/AAAAAAAAF6g/FVAiP0h8CSc/s1600/fiborial_java.PNG

+0

如果我沒有javac.exe,該怎麼辦? – Fuser97381

+1

你可能只有JRE。您需要下載JDK並安裝它,這會爲您提供javac.exe java編譯器。從http://www.oracle.com/technetwork/java/javase/downloads/index.html獲取它 –