2015-05-27 79 views
0

我創建了一個可執行的jar文件並將所有.wav,.ttf,.png和.class文件添加到jar中。當我運行jar文件時,當jar文件包含在需要所有其他文件的文件夾中時,它完美地工作。將.wav文件和.ttf字體文件添加到可執行jar文件中

但是我想包括所有的文件,需要在jar文件中正確執行我的應用程序。我用命令:

jar cvfe App.jar Main *.class *.png *.ttf *.wav

在Windows命令提示符。在包含上面列出的所有必需文件的文件夾外部執行jar文件時,只有圖像文件和類文件似乎包含在jar文件中,字體文件和聲音文件不起作用,並且GUI顯示默認字體和聲音也不起作用。 命令提示符上的堆棧跟蹤顯示當我執行上述命令時所需的所有文件都被添加,但似乎無法工作。

*****編輯******

我繼承人如何我在加載字體。

Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream("C&LBOLD.ttf")).deriveFont(50f); 

我繼承人如何我加載.wav文件:

File waveFile = new File("sounds//berlin.wav"); 
+0

http://stackoverflow.com/questions/4548699/load-file-within-a-jar – Tschallacka

回答

4

最有可能你不是通過類加載器加載的文件。

如果您提供加載這些文件的代碼,我們可以確認。

[編輯]感謝您發佈額外的代碼 - 這是懷疑。您需要使用類加載器加載文件。

因此,例如,當你有...

new FileInputStream("C&LBOLD.ttf")

你應該有這樣的事情,而不是...

this.getClass().getClassLoader().getResourceAsStream("C&LBOLD.ttf")

Java將後來才知道旁觀類資源的類路徑(因此在jar中)。

+0

謝謝你剛剛編輯了我如何加載文件 – fooll

+0

你正在加載這些資源作爲文件系統的文件。請參閱我的修訂答案以瞭解如何解決。 –

0

您應該使用

Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getClassLoader().getResourceAsStream("C&LBOLD.ttf")).deriveFont(50f); 

你這是怎麼加載位於類路徑(無論是從一個.jar或目錄)的資源。請記住,如果您將jar部署爲Web應用程序的一部分,則這可能無法在某些容器中使用。

這也是一個好主意,檢查null的輸入,以確保資源退出。