2017-04-15 55 views
0

我知道這個話題已經了很多次,sollution後,我一直在尋找計算器幾個小時,但仍然沒有工作。從Eclipse中導出可運行的jar文件時,我無法使我的jar文件工作。當我運行它時,該程序在Eclipse中完美工作,但是當我嘗試打開jar文件時,屏幕會變黑,然後沒有任何反應。我嘗試用java -jar nameoffile.jar命令打開它,並且有filenotfoundexception。這是它在我嘗試運行它時在cmd中看起來像的樣子。Jar文件不工作(在cmd中運行時,FileNotFoundException異常)

有沒有人有任何建議? 感謝

enter image description here

+0

你用什麼來建立你的jar? – ProgrammerBoy

+0

從日食我用出口 - >運行的JAR文件 –

+0

曾經嘗試都「包所需的庫到生成的JAR」和「提取所需的庫到生成的JAR」 –

回答

1

的問題是你如何讓你的資源。

你把你的wav文件中src文件夾中的嘗試使用的FileInputStream,這是行不通的得到它們。

如果你把你的文件放進瓶子裏,你應該訪問它們通過量:

getClass().getResourceAsStream(filepath)

這樣的事情。

public class LoadFile { 
    public static void main(String[] args) throws Exception { 
     InputStream stream = 
      LoadFile.class.getResourceAsStream("/songwavs/s1_..._.wav"); 
      AudioSystem.getAudioFileFormat(stream); 
      AudioSystem.getAudioFileFormat(url); 
    } 
} 

這只是一個例子,關鍵是作爲jar中的資源,ClassLoaders是獲取它的工具。

所以,非靜態方法裏面可以使用:

public void myMethod() throws Exception{ 
    InputStream stream = getClass().getResourceAsStream("/songwavs/s1_..._.wav"); 
    AudioSystem.getAudioFileFormat(stream); 
} 

在某些情況下的,你需要使用線程的類加載器是這樣的:

public void myMethod2() throws Exception{ 
    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/songwavs/s1_..._.wav"); 
    AudioSystem.getAudioFileFormat(stream); 
} 

然後你可以把閱讀您的文件無論是從eclipse運行還是從jar運行。

更可以說如何打包應用程序和部署它,但是這僅僅是一個開始。

+0

好的。但不改變程序,很多代碼都有一個導出jar文件選擇「將所需的庫複製到生成的jar文件旁邊的子文件夾中」,也許可以工作? –

+0

不,不會,beacaue的FileInputStream讀取文件,而在一個jar文件中的條目不是一個文件,你應該用你的應用程序一起部署你的src目錄,並把它的工作目錄裏面,當你運行應用程序。 – minus

+0

好的。謝謝您的幫助!今晚要使用LoadFile.class改變我的程序。的getResourceAsStream( 「/ songwavs/S1 _..._ WAV」);並看看它是否有效。我今晚晚些時候回來 –

相關問題