Java™ 教程(常見問題及其解決方案)

常見問題(及其解決方案)

編譯器的問題

Microsoft Windows系統上常見的錯誤消息。html

'javac' is not recognized as an internal or external command, operable program or batch file

若是你收到這個錯誤,Windows將沒法找到編譯器(javac)。java

這裏有一種方法能夠告訴Windows哪裏能夠找到javac,假設你在C:jdk1.8.0中安裝了JDK,在提示符處輸入如下命令並按Enter鍵:程序員

C:\jdk1.8.0\bin\javac HelloWorldApp.java

若是你選擇此選項,你必須在你的javacjava命令以前使用C:\jdk1.8.0\bin,每次編譯或運行一個程序時,爲了不這種額外的輸入,請參考JDK 8安裝說明中更新PATH變量的部分。web

Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested

若是收到此錯誤,則在編譯程序時忘記包含.java後綴,記住,這個命令是javac HelloWorldApp.java,不是javac HelloWorldApp。shell

UNIX系統上常見的錯誤消息

javac: Command not found

若是你收到這個錯誤,UNIX將沒法找到編譯器javacexpress

有一種方法能夠告訴UNIX在哪裏找到javac,假設你在/usr/local/jdk1.8.0中安裝了JDK,在提示符下輸入如下命令並按回車:編程

/usr/local/jdk1.8.0/javac HelloWorldApp.java
若是你選擇此選項,那麼每次編譯或運行一個程序時,你都必須在你的javac和java命令以前加上 /usr/local/jdk1.8.0/,爲了不這種額外的輸入,你能夠將這些信息添加到PATH變量中,這樣作的步驟將根據當前運行的shell而有所不一樣。
Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested

若是收到此錯誤,則在編譯程序時忘記包含.java後綴,記住,這個命令是javac HelloWorldApp.java,不是javac HelloWorldAppsegmentfault

語法錯誤(全部平臺)

若是你錯誤地編寫程序的一部分,編譯器可能會發出語法錯誤,消息一般顯示錯誤的類型、檢測錯誤的行號、行上的代碼以及代碼中錯誤的位置,在語句末尾省略分號(;)會致使如下錯誤:windows

testing.java:14: `;' expected.
System.out.println("Input has " + count + " chars.")
                                                     ^
1 error

有時,編譯器沒法猜想你的意圖,若是錯誤級聯超過幾行,則會打印出混亂的錯誤消息或多個錯誤消息,例如,下面的代碼片斷省略了粗體行中的分號(;):瀏覽器

while (System.in.read() != -1)
    count++
System.out.println("Input has " + count + " chars.");

在處理此代碼時,編譯器發出兩個錯誤消息:

testing.java:13: Invalid type expression.
        count++
                 ^
testing.java:14: Invalid declaration.
    System.out.println("Input has " + count + " chars.");
                      ^
2 errors

編譯器發出兩個錯誤消息,由於在它處理count++以後,編譯器的狀態代表它位於表達式的中間,若是沒有分號,編譯器就沒法知道語句是否完整。

若是你看到任何編譯錯誤,那麼你的程序沒有成功編譯,編譯器也沒有建立.class文件,仔細檢查程序,修復你檢測到的任何錯誤,而後再次嘗試。

語義錯誤

除了驗證你的程序語法正確以外,編譯器還檢查其餘基本正確性,例如,每次使用未初始化的變量時,編譯器都會警告你:

testing.java:13: Variable count may not have been initialized.
        count++
        ^
testing.java:14: Variable count may not have been initialized.
    System.out.println("Input has " + count + " chars.");
                                       ^
2 errors

一樣,你的程序沒有成功編譯,編譯器也沒有建立.class文件,修復錯誤並再次嘗試。

運行時的問題

Microsoft Windows系統上的錯誤消息。

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp

若是你收到此錯誤,java將沒法找到你的字節碼文件HelloWorldApp.class

java試圖找到.class文件的地方之一是當前目錄,所以,若是你的.class文件在C:\java中,你應該將當前目錄更改成C:\java,若要更改目錄,請在提示符處輸入如下命令,而後按回車鍵:

cd c:\java

他的提示應該更改成C:\java>,若是在提示符處輸入dir,應該會看到.java.class文件,如今再次輸入java HelloWorldApp

若是仍然有問題,你可能須要更改CLASSPATH變量,要查看是否須要這樣作,請嘗試使用如下命令對類路徑進行截斷。

set CLASSPATH=

如今再次輸入java HelloWorldApp,若是該程序如今能夠工做,那麼你必須更改CLASSPATH變量,要設置此變量,請參閱JDK 8安裝說明中更新路徑變量一節,CLASSPATH變量的設置方式相同。

Could not find or load main class HelloWorldApp.class

初學者程序員常犯的一個錯誤是嘗試在編譯器建立的.class文件上運行java啓動程序,例如,若是你試圖使用HelloWorldApp.class而不是java HelloWorldApp運行程序,你將會獲得這個錯誤。記住,參數是要使用的類的名稱,而不是文件名。

Exception in thread "main" java.lang.NoSuchMethodError: main

Java VM要求使用它的類有一個main方法來開始執行應用程序,詳解「Hello World!」應用中詳細討論了main方法。

UNIX系統上的錯誤消息

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp

若是你收到此錯誤,java將沒法找到你的字節碼文件HelloWorldApp.class

java試圖找到你的字節碼文件的地方之一是當前目錄,例如,若是你的字節碼文件位於/home/jdoe/java中,你應該將當前目錄更改成該目錄,若要更改目錄,請在提示符處輸入如下命令並按回車:

cd /home/jdoe/java

若是在提示符處輸入pwd,應該會看到/home/jdoe/java,若是在提示符處輸入ls,應該會看到.java.class文件,如今再次輸入java HelloWorldApp

若是你仍然有問題,你可能須要更改CLASSPATH環境變量,要查看是否須要這樣作,請嘗試使用如下命令對類路徑進行截斷。

unset CLASSPATH

如今再次輸入java HelloWorldApp,若是該程序如今能夠工做,那麼你將必須以與上面的PATH變量相同的方式更改CLASSPATH變量。

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

初學者程序員常犯的一個錯誤是嘗試在編譯器建立的.class文件上運行java啓動程序,例如,若是你試圖使用HelloWorldApp.class而不是java HelloWorldApp運行程序,你將會獲得這個錯誤。記住,參數是要使用的類的名稱,而不是文件名。

Exception in thread "main" java.lang.NoSuchMethodError: main

Java VM要求使用它的類有一個主要的方法來開始執行應用程序,詳解「Hello World!」應用中詳細討論了main方法。

Applet或Java Web Start應用程序被阻塞

若是你正在經過瀏覽器運行一個應用程序,並獲得安全警告說該應用程序被阻塞,請檢查如下條目:

  • 驗證JAR文件清單中的屬性是否爲應用程序正在運行的環境正確設置,須要使用Permissions屬性,在NetBeans項目中,你能夠經過擴展項目文件夾和雙擊manifest.mf,從NetBeans IDE的Files選項卡中打開清單文件。
  • 驗證應用程序是由一個有效的證書籤名的,而且該證書位於簽名者CA keystore中。
  • 若是你正在運行一個本地applet,請設置一個用於測試的web服務器,你還能夠將應用程序添加到異常站點列表中,該列表在Java控制面板的Security選項卡中進行管理。

上一篇:仔細看看「Hello World!」應用程序

下一篇:面向對象編程概念

相關文章
相關標籤/搜索