2013-04-23 152 views
-1

所以我試圖編譯和運行在java中的問題,我不能讓它運行。我只是想用HelloWorld類和打印「hello world」的主函數來做一個基本的包。Java編譯NoClassDefFoundError

package helloworld; 

public class HelloWorld { 

    public static void main(String args[]) { 
     System.out.println("Hello world \n"); 
    } 
} 

然後我調用javac HelloWorld.java來編譯它。然後,當我嘗試執行代碼,我得到這個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: helloworld/HelloWorld) 
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) 

編輯: 我試圖使用命令來運行代碼的「java HelloWorld」的

+0

您是否嘗試使用命令/ IDE運行? – sanbhat 2013-04-23 04:28:53

+0

我試圖運行它使用「java HelloWorld」 – NateSHolland 2013-04-23 04:30:40

+0

嘗試刪除包語句 – alfasin 2013-04-23 04:31:08

回答

4

讓我們看看,如果你明白我做了什麼

tmp$ mkdir helloworld 
tmp$ vi helloworld/HelloWorld.java 
#paste the content of the class *including* package definition 
tmp$ cd helloworld/ 
helloworld$ javac HelloWorld.java 
helloworld$ java HelloWorld 
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: helloworld/HelloWorld) 
    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: HelloWorld. Program will exit. 
helloworld$ cd .. 
tmp$ java helloworld.HelloWorld 
Hello world 

而且,閱讀本:http://www.cs.usfca.edu/~parrt/course/601/lectures/java.tools.html

+0

基本上你需要'java helloworld.HelloWorld'而不是'java helloworld/HelloWorld' – sanbhat 2013-04-23 04:35:01

+0

你不需要指定helloworld.HelloWorld在helloworld /目錄下嗎?如果該方法位於「Test /」 – NateSHolland 2013-04-23 04:35:04

+0

包等文件夾中,那麼您將更改哪些內容,只不過是目錄結構。如果你將'helloword'文件夾更改爲'Test',我假設你想將包從'helloworld''更改爲'Test' – Nishant 2013-04-23 04:37:06

0

執行以下步驟 1.將HelloWorld.java文件到一個空目錄 2. javac -d。 HelloWorld.java 3. java -classpath。 helloworld.HelloWorld

您的設置存在2個問題。 1.編譯時需要使用-d選項。這將根據包結構生成.class文件。這對於運行.class文件很有用。這是因爲java期望包結構中的.class文件。 2.將類路徑指定爲'。'代表當前目錄運行程序。

,你也可以使用這個 1的javac -dc:\ TEMP HelloWorld.java 3的java -classpath C:\ TEMP helloworld.HelloWorld

0

距離的Helloworld改變你的類名其他(如HL )並運行這樣的(在電子驅動假設) E:> CD的HelloWorld

E:\的HelloWorld>的javac hl.java

E:\的HelloWorld> CD ..

E:>的java helloworld.hl Hello world