2014-02-08 97 views
21

我試圖將HelloWorld放入.jar文件並運行它,但它不起作用。我創建的Java文件和程序類型,然後在cmd中寫道:.jar錯誤 - 無法找到或加載主類

javac HelloWorld.java 
java HelloWorld 

和它的工作。然後我進入

echo Main-Class: HelloWorld >manifest.txt 
jar cvfm HelloWorld.jar manifest.txt HelloWorld.class 

,並得到

added manifest 
adding: HelloWorld.class(in = 426) (out= 288)(deflated 32%) 

我便進入

java -jar HelloWorld.jar 
HelloWorld.jar 

和第一線工作,而第二行給了我一個錯誤的輸出:

Error: Could not find or load main class path\HelloWorld.jar 

這是相同的ou當我試圖用64位jre7 \ bin,jdk1.7.0_51 \ bin,jdk1.7.0_51 \ jre \ bin以及32位的java.exe文件打開它時,我得到了(在快速關閉的窗口中) jre7 \ bin中。我卸載並重新安裝了我的jre和jdk,並重新創建了我的.class和.jar文件,但問題仍然存在。我在win8上。

編輯:我試圖做aetheria建議,但沒有運氣。我把HelloWorld.java路徑\ COM \計算器\用戶\ blrp,編譯它,和它的工作由路徑進入

java com.stackoverflow.user.blrp.HelloWorld 

。然後,我創建的清單和jar:

(echo Manifest-Version: 1.0 
echo Class-Path: . 
echo Main-Class: com.stackoverflow.user.blrp.HelloWorld) >manifest.txt 
jar cvfm HelloWorld.jar manifest.txt com\stackoverflow\user\blrp\HelloWorld.class 

,並得到了輸出

added manifest 
adding: com/stackoverflow/user/blrp/HelloWorld.class(in = 454) (out= 312)(deflat 
ed 31%) 

但儘管如此,Java的罐子的HelloWorld.jar工作,的HelloWorld.jar沒有(同樣的錯誤)。我也試過不做包裝的事情,只是清單中的類路徑,結果相同。

(另外,我通過使用一個.bat文件的問這個問題之前,解決了這個問題,但它還是會是甜的得到那個罐子的工作。)

+0

清單應打包爲/META-INF/MANIFEST.MF解壓縮任何jar文件以查看示例例如jre/lib/rt.jar – jbaliuka

+0

將空行打印到清單的末尾,它應該可以工作。 – jbaliuka

+0

echo會自動創建空行(沒有空行,java -jar也不行),並且在創建jar時正確打包清單。 – Blrp

回答

13

謝謝jbaliuka的建議。我打開註冊表編輯器(通過鍵入CMD註冊表編輯器)和將要HKEY_CLASSES_ROOT> jar文件>殼>開>命令,然後打開(默認)並且改變值從

"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*

"C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*在這之後,你必須右鍵單擊一個jar - >打開 - >選擇默認程序 - >導航到你的java文件夾並打開\ jre7 \ bin \ java。 (或任何其他java.exe文件在你的Java文件夾)。如果它不起作用,請嘗試切換到javaw.exe,使用它打開一個jar文件,然後切換回來。

我對編輯註冊表一無所知,除非它是危險的,所以在做這件事之前(在頂部欄中,File> Export),您可能需要備份它。

9

你總是可以運行此:

java -cp HelloWorld.jar HelloWorld 

-cp HelloWorld.jar將jar添加到classpath中,然後HelloWorld運行您編寫的類。

要創建一個主類運行的JAR,沒有包裝,添加Class-Path: .到清單:

Manifest-Version: 1.0 
Class-Path: . 
Main-Class: HelloWorld 

我會建議使用package給你的類自己的命名空間。例如。

package com.stackoverflow.user.blrp; 

public class HelloWorld { 
    ... 
} 
+0

我試過了,看看編輯後的OP。 – Blrp

5

我在查找上述問題的答案時發現此問題。但在我的情況下,問題是使用'短劃線'而不是'短劃線'。檢查你正在使用哪一個破折號,這可能是錯誤的。我希望這個答案可以加快別人的搜索速度,像這樣的評論本可以爲我節省一點時間。

+0

你用什麼編輯器,Microsoft Word?或者你有一個特殊字符的鍵盤?我沒有倒下,但這似乎是一個很少人會遇到的問題,因爲它也會出現在任何使用破折號的程序中。 – Noumenon

+2

我應該更清楚,這是複製/粘貼問題的明確結果。原來的命令行有連字符,我將它們複製到我自己的版本中。在我將.JAR傳遞給2位同事之前,我一直堅持下去,他使用我的命令行參數運行它,在那裏失敗。然後是第二個編寫自己的命令行參數的人,並驗證它工作正常。這讓我看到了ASCII代碼中的命令,我發現它們的區別。感謝您的反饋。 – EuroTech

+0

我剛找到這個答案後,拼命搜查,並在我的桌子上敲我的頭。我的問題是命令行被剪切並粘貼出Outlook。還有一件事要注意......謝謝@EuroTech – Ukko

0

I在使用jar文件安裝設置時遇到同樣的問題。 thta爲我工作的解決方案是

  1. 打開命令提示符以管理員身份
  2. 轉到jdk的bin目錄(Ex.C:\程序Files \ Java的\ jdk1.8.0_73 \ BIN)
  3. 現在執行java -jar <<jar fully qualified path>>

它爲我:)

+2

這不是問題。正如我在OP中所說的,在我問這個問題之前,'java -jar HelloWorld.jar'工作。另外,如果'bin'是你的'PATH'環境變量的一部分,你不需要去它。 – Blrp

1

有這個問題找不到答案,所以我開始尋找其他線程上,我發現我是讓我的應用程序1.8,但由於某種原因,我的JRE出去d即使我記得更新它。我下載了8個垃圾箱,這個jar文件運行得非常好。希望這可以幫助。

相關問題