2014-01-22 63 views
2

如何在Java中製作我的項目的可執行文件? 我試圖右鍵點擊我的項目並選擇導出。將java項目編譯爲可執行文件

http://i.imgur.com/XvyDZ8i.png

http://img560.imageshack.us/img560/6379/3ey9.png

的問題是,當我執行它導出的jar文件不會打開!我錯過了什麼嗎?有沒有辦法使我的項目中的可執行文件.exe

,當我在cmd中執行的jar文件,它說:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.libr 
ary.path 
     at java.lang.ClassLoader.loadLibrary(Unknown Source) 
     at java.lang.Runtime.loadLibrary0(Unknown Source) 
     at java.lang.System.loadLibrary(Unknown Source) 
     at org.lwjgl.Sys$1.run(Sys.java:73) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.lwjgl.Sys.doLoadLibrary(Sys.java:66) 
     at org.lwjgl.Sys.loadLibrary(Sys.java:95) 
     at org.lwjgl.Sys.<clinit>(Sys.java:112) 
     at org.lwjgl.opengl.Display.<clinit>(Display.java:135) 
     at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36) 
     at JavaGame.Game.main(Game.java:34) 
+1

1)嘗試在命令行上運行jar文件並查看可能獲得的任何錯誤消息。 2)請搜索這個和其他網站有關創建從Java項目的exe文件,因爲這已徹底重新哈希。你真的想在大多數情況下避免這樣做,最好的辦法是創建一個正在運行的Jar文件。 –

+0

請注意,如果您發現您絕對需要一個exe文件的情況較少,那麼您仍然需要先運行一個jar文件。 –

+0

可能重複[如何創建Java項目的JAR/exe?](http://stackoverflow.com/questions/2305762/how-can-i-create-a-jar-exe-of-a- java-project) –

回答

3

UnsatisfiedLinkError表示您缺少本機庫(通常是Windows上的.dll文件或Linux上的.so文件)。您需要執行以下任一操作:

  1. 不推薦:將本機庫複製到默認java.library上的位置。路徑(在Windows上,這包括C:\Windows\system32
  2. 不推薦:本機庫複製到一個目錄,然後用java -Djava.library.path=dir/containing/library -jar <jarfile>
  3. 推薦運行程序:捆綁在你的jar文件的DLL,然後修改代碼以提取DLL到臨時目錄並使用System.loadSystem.loadLibrary加載它。

你可以使用上面的兩個解決方案中的任何一個作爲快速入門,但它們都不是很好。從部署的角度來看,最好的解決方案是上面的#3。

對於你的情況,你使用的是Lightweight Java Game Library,或者你的UnsatisfiedLinkError中引用的lwjgl。所以你需要包含lwjgl附帶的任何DLL。

當您解壓lwjgl時,您會注意到它有一個包含每個受支持平臺的子目錄的本機目錄。這裏是LWJGL的Windows的DLL列表:

Windows DLLs in lwjgl zipfile

實現的解決方案#3以上,讓你的可執行jar文件跨平臺:

    在你的項目/ jar文件
  1. ,創建一個單獨的目錄每個平臺
  2. 將每個平臺的所有本機庫置於相應的目錄中(將它們放入與某些實用程序類相同的目錄中(稍後可用於提取它們可能會有所幫助)
  3. 當你的程序導出到一個jar文件,確保本地庫包含
  4. 查找平臺/操作系統(例如,System.getProperty(「os.name」))
  5. 在Java代碼中(可能在您的主要方法或某種實用方法中),爲您在步驟3中查找的任何平臺創建一個臨時目錄
  6. ,將相應的本地庫提取到您在步驟4中創建的目錄(提示:使用Class.getResourceAsStream獲取InputStream,然後使用Files.copy將其提取到文件中)
  7. 對於您在步驟5中提取的每個庫,請致電System.load("path/to/library_file")

請參閱https://stackoverflow.com/a/1611367/44737,其中包含代碼。

+0

我需要什麼DLL文件?我正在使用Windows 8 – anony50600

+1

對不起,我應該更清楚。我會更新我的答案。您需要您使用的輕量級Java遊戲庫附帶的DLL(錯誤中引用的lwjgl)。 http://lwjgl.org/ – rob

+0

耶和thx,我希望你能解釋我如何做推薦部分,這意味着我必須使用System.Load – anony50600

2

您可以使用jar command line tool手動的jar包的一切,也可以自動包裝使用的工具,如Ant你煲的過程中,MavenGradle

將類文件正確打包到jar文件後,可以通過創建適合您的操作系統的腳本文件來執行它們。例如windows中的批處理文件或Linux中的bash文件。

您只需調用java命令並提供您的類路徑和應用程序入口點的名稱即可。

#!/bin/bash 
java -cp myApp.jar com.my.app.Main 

就是這樣。您通過調用該腳本來執行您的應用程序。

此外,您可以通過爲您的jar文件定義MANIFEST文件來安排創建可執行jar。在該清單文件中,您可以放置​​一個屬性Main-Class,指示您的應用程序入口點,並且可以定義另一個名爲Class-Path的屬性,該屬性允許您指定應用程序所需的其他jar的列表。

請參閱Running Jar-Packaged Software

如果以這種方式打包jar,某些操作系統允許您通過簡單地雙擊jar來執行該應用程序。

但最可能的是,你仍然需要創建一個腳本,只是有點不同,這一次:

Java Tutorial: Packaging Applications in Jar Files。最終,如果你確實需要創建一個可執行文件,並且如果你正在使用Windows,你可以考慮使用WinRun4j這樣的工具。

相關問題