2013-07-01 140 views
53

我試圖運行Java應用程序,但收到此錯誤:如何解決ClassNotFoundException?

java.lang.ClassNotFoundException:

冒號後面就是一個缺少的類的位置。然而,我知道那個地方並不存在,因爲這個地方是其他地方。我如何更新該類的路徑?它與班級路徑有什麼關係?

+1

您必須添加其中有缺少類的classptah – Crom

+0

如果jar你的班有一個包,然後去包含該類的文件夾。即g如果包是包test.abc,則在測試前轉到文件夾,然後執行java -cp。 test.abc.CLASSNAME(不含.class)。 如果沒有包,則轉到包含類的文件夾並說java -cp。 CLASSNAME – Optional

+0

任何一個類未被部署到您的運行時(例如缺少jar),或者該類在給定的類加載器中不可見,請檢查此工具以幫助解決這些問題:http://jhades.org –

回答

21

你的類路徑被破壞(這是在Java世界中一個非常常見問題)。

根據您啓動應用程序的方式,您需要將參數修改爲-cp,MANIFEST.MF中的Class-Path條目或磁盤佈局。

+18

您可以請更具體的日食?我需要做什麼? – user2426316

+15

您的問題未包含足夠的信息以提供更具體的答案。考慮添加。 –

4

如果您知道類或包含該類的jar的路徑,請在運行時將其添加到類路徑中。您可以使用類路徑這裏提到:

在Windows

java -classpath .;yourjar.jar YourMainClass 

在UNIX/Linux

java -classpath .:yourjar.jar YourMainClass 
1

回到頂端並刪除導入語句(如果有),然後重新導入該類。但如果情況並非如此,那就乾淨整潔吧。你在使用Netbeans還是Eclipse?

2

要通過命令行將類的位置添加到類路徑中,只需在運行時添加-cp-classpath以及該類的位置。 I.E.

java -cp "c:/location/of/file" YourProgram 

或者,如果你正在運行的IDE,比如Eclipse,你可以右鍵點擊project -> build path -> configure build path 並添加包含類的構建路徑,那麼它應該工作良好的外部JAR。

21

類路徑是從中加載類的位置的列表。

這些位置可以是目錄或jar文件。

對於目錄,JVM將按照預期的模式加載一個類。如果我在我的類路徑中有目錄C:/ myproject/classes,並且我嘗試加載類com.mycompany.Foo,它將在類目錄下查找名爲com的目錄,然後在該目錄下一個名爲mycompany的目錄,最後它將在該目錄中尋找名爲Foo.class的文件。

在第二個實例中,對於jar文件,它將搜索該類的jar文件。實際上,jar文件只是上面的一個壓縮目錄集合。如果你解壓縮一個jar文件,你會得到一堆目錄和類文件,遵循上面的模式。

因此,當JVM嘗試加載類定義時,它從頭到尾遍歷一個類路徑,以查找該類的定義。例如,在類路徑:

C:/ myproject的/類; C:/myproject/lib/stuff.jar; C:/myproject/lib/otherstuff.jar

的JVM將試圖在尋找目錄先,然後在stuff.jar,最後在otherstuff.jar

當您遇到ClassNotFoundException時,表示JVM已遍歷整個類路徑,但找不到您嘗試引用的類。 Java解決方案常常是在Java世界中檢查你的類路徑。

你可以在命令行上定義一個類路徑,通過說java -cp然後你的類路徑。在Eclipse等IDE中,您將有一個菜單選項來指定您的類路徑。

1

我遇到了這個問題,並嘗試了所有其他解決方案。我的HTML文件夾中沒有.class文件,我只有.java文件。一旦我添加.class文件,程序運行良好。

1
  1. ,如果你的類路徑是不正確的

  2. 讓我們斷定在相同的項目名稱序列化類和deserializable類這可能發生。您運行可序列化的類,在特定文件夾中創建可序列化的對象。現在你需要無證的數據。同時,如果您更改項目名稱,則無法使用。您必須先運行可序列化的類,然後反序列化文件。

2

使用';'作爲分隔符。如果你的環境變量設置正確,你應該看到你的設置。如果您的PATH和CLASSPATH正確,那麼Windows應該識別這些命令。安裝Java時不需要重新啓動計算機。

+3

這是在Windows(分號)上,在Unix/Linux上它是':'(冒號) – Joeblade

-2

放入try塊,然後趕上之外,所有的代碼在catch塊

try 
{ 
    // code 
} 
catch(ClassNotFoundException e1) 
{ 
    e1.getmessage(); 
} 
+1

這不能解決異常。這隱藏了例外。此外,「e1.getmessage()」是a)getMessage()和b)的大寫字母不正確,因爲它返回一個帶有消息的字符串,而您並未打印它或記錄它或任何東西! – IBBoard

2

我用maven爲我的項目,當我做mvn clean install並嘗試運行一個程序,它拋出異常。所以,我清理了這個項目並重新運行它,它對我很有用。

我使用Eclipse IDE。

爲:

Class Not Found Exception when running Junit test

嘗試運行mvn clean test一旦將編譯所有的測試類(爲我工作)。

7

這是我到目前爲止發現的best solution

假設我們有一個包叫做org.mypackage含有類:

  • 的HelloWorld(主類)
  • SupportClass
  • UtilClass

,並確定這個包中的文件物理下保存目錄D:\myprogram(在Windows上)或/home/user/myprogram(在Linux上)。

文件結構如下所示: enter image description here

當我們調用Java,我們指定運行應用程序的名稱:org.mypackage.HelloWorld。但是,我們還必須告訴Java在哪裏查找定義我們軟件包的文件和目錄。因此,要啓動該程序,我們必須使用下面的命令: enter image description here

NOTE: You have to execute the above java command no matter what your current location is. But this is not the case for javac . For compiling you can even directly go into the directory where you have your .java files and directly execute javac ClassName.java .

2

添加jar文件的完整路徑到CLASSPATH。在linux下使用:export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"。其他方式工作(不編輯CLASSPATH)解壓縮當前項目文件夾中的jar。

方式並沒有爲我工作:

1)使用-cp選項以jar文件的完整路徑。

2)使用-cp與位於當前文件夾

3時罐的唯一名稱)複製罐子當前項目文件夾

4)複製的jar到Java罐的標準位置(在/ usr/share/java目錄)

該解決方案報告了使用mysql-connector-java.5類com.mysql.jdbc.Driver - *罐子,在Linux上正與OpenJDK的1.7版

+0

只解壓縮JAR爲我工作,沒有其他解決方案 – OverCoder

1

如果您使用的是maven ,請嘗試更新所有項目並強制創建快照。 它將清除以及重建和所有的classpath .. 它解決了我的問題..

0

我試圖使用Process類C#代碼運行的.jar。 java代碼從eclipse中成功運行,但它不是從C#visual studio中直接點擊jar文件,它總是以ClassNotFoundException:異常停止。我的解決方案是將java程序導出爲「Runnable JAR文件」而不是「JAR文件」。希望它可以幫助某人。

0

我只是做了

1.Invalidate緩存和重新啓動

2. 重建我的項目這解決了這個問題