2013-05-02 115 views
1

我試圖運行一個非常簡單的程序,並且遇到錯誤。我做了一個非常簡單的helloworld java程序,並且無法在Mac上從終端運行它。我已經檢查確保classpath設置正確,並且爲什麼它沒有運行而感到困惑。Hello World上的NoClassDefFoundError

下面是程序:

public class Hello { 
    public static void main(String[] args) { 
     System.out.println("Hello, World"); 
    } 
} 

這裏是終端命令:

Last login: Thu May 2 12:01:50 on ttys000 
172-26-125-179:~ rohan$ cd /Users/rohan/Desktop 
172-26-125-179:Desktop rohan$ ls 
Hello.java 
172-26-125-179:Desktop rohan$ echo $CLASSPATH 

172-26-125-179:Desktop rohan$ export CLASSPATH=/Users/rohan/Desktop 
172-26-125-179:Desktop rohan$ echo $CLASSPATH 
/Users/rohan/Desktop 
172-26-125-179:Desktop rohan$ java Hello.java 
Exception in thread "main" java.lang.NoClassDefFoundError: Hello/java 
Caused by: java.lang.ClassNotFoundException: Hello.java 
    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) 
172-26-125-179:Desktop rohan$ 

任何想法將不勝感激! UPDATE忽略在前一種情況下,這是我的問題的一個更好的視野:

Last login: Thu May 2 13:05:17 on ttys000 
172-26-125-179:~ rohan$ cd /Users/rohan/Dropbox/Current/ds/lab6 
172-26-125-179:lab6 rohan$ ls 
Hello.java 
172-26-125-179:lab6 rohan$ cat Hello.java 
public class Hello { 
    public static void main(String[] args) { 
     System.out.println("hi"); 
    } 
} 
172-26-125-179:lab6 rohan$ echo $CLASSPATH 

172-26-125-179:lab6 rohan$ export CLASSPATH=/Users/rohan/Dropbox/Current/ds/lab6 
172-26-125-179:lab6 rohan$ echo $CLASSPATH 
/Users/rohan/Dropbox/Current/ds/lab6 
172-26-125-179:lab6 rohan$ javac Hello.java 
172-26-125-179:lab6 rohan$ java Hello.class 
Exception in thread "main" java.lang.NoClassDefFoundError: Hello/class 
Caused by: java.lang.ClassNotFoundException: Hello.class 
    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) 
172-26-125-179:lab6 rohan$ 
+0

哪裏是類文件中創建? – OldProgrammer 2013-05-02 16:52:12

+1

@OldProgrammer它不是;那就是問題所在。看看'ls'輸出。 – wchargin 2013-05-02 16:53:24

回答

0

當運行Java,請不要在你想運行的類名包括「的.java」。嘗試

java Hello 

ls輸出,它甚至還沒有編譯。你當然必須先編譯它。

javac Hello.java 

編輯

的除了質疑各國現在,它javac編譯成功。但是現在命令java Hello.class正在運行。不要在Java類名稱中包含「.class」(或前面的「.java」)來運行。

解決辦法仍然是:

java Hello 
+0

這不是問題。它沒有編譯。 – wchargin 2013-05-02 16:52:20

+0

這個問題不清楚它是否被編譯。但是「java Hello.java」肯定是錯誤的。但無論如何我會更新我的答案...... – rgettman 2013-05-02 16:53:47

+0

它*是*清楚;他是目錄,只有一個文件。 – wchargin 2013-05-02 16:55:32

1

嘗試:

$的javac Hello.java

$的Java你好

1

你需要編譯它。

javac Hello.java 
java Hello 

第一個命令生成一個文件,Hello.class,在當前工作目錄(桌面在你的例子)。第二個運行主程序爲Hello的Java程序。

注意在第二個命令中沒有.java。如果您編寫java Hello.java,JRE會在包Hello中尋找名爲java的類(請注意輸出:在「Hello/java」中找不到類)。

如果javac給出錯誤,那麼您可能需要安裝Java開發工具包(JDK)以及Java運行時環境(JRE)。

+0

謝謝,這工作完美! – rohan123 2013-05-02 20:58:02

0

java程序使用javac編譯器進行編譯。它捆綁了jdk。你需要安裝JDK然後編譯它像

javac Hello.java 

它會生成一個類文件Hello.class,那麼你可以運行的類文件

java Hello 
+0

非常感謝! – rohan123 2013-05-02 20:58:23