簡體   English   中英

將Java文件編譯為jar文件后,為什么圖像路徑不再起作用?

[英]Why does an image path no longer work once I compile my java files into a jar file?

我有一個使用系統任務欄圖標的相對基本的Java程序。 我在編寫代碼時使用的路徑如下"../images/logo.png" 但是,當我將其編譯為jar文件時,該圖像不會顯示在系統托盤中。 相反,如果我將路徑更改為"./images/logo.png" ,則該圖像以jar文件形式出現在系統托盤中,而不是在測試時出現。

這不是主要問題。 但是,我很好奇為什么會出現這種不一致的情況。

將程序打包為.jar文件時,您的構建很可能會將映像復制到.jar文件所在的目錄中。 但是,在ide中調試時,映像文件位於下面的一個目錄中。

另一種可能性是,您只是在兩種情況下將“直接工作”設置為不同。

順便說一句,您可能有興趣將圖像嵌入到jar文件中,請參閱: https : //stackoverflow.com/a/1096491/24954

這個答案取決於兩件事。 圖像文件是否嵌入。

嵌入式資源

一旦對應用程序進行Jar'ed操作並且圖像被嵌入應用程序內部,常規的文件訪問方法將不再起作用。

嘗試做類似...

new ImageIcon("../images/logo.png");

要么

new File("../images/logo.png");

不行 這是因為資源不再是文件系統上下文中的文件(實際上是Jar中的一個Zip條目)。

相反,您需要使用Class#getResource ,它將返回URL到嵌入式資源。

new ImageIcon(getClass().getResource("../images/logo.png"));

會更好地工作。 不過,一般而言,建議對資源使用絕對路徑new ImageIcon(getClass().getResource("/images/logo.png")); 因為通常比較難破解(恕我直言)

外部資源

圖像的路徑相對於應用程序的執行點。

在開發中,您可能必須向上移動目錄(可能是src文件夾中的目錄)才能找到圖像資源。 這意味着您將需要將Jar文件存儲在一個文件夾中,這需要將它逐步升級才能找到圖像資源。

如果可以的話,通常最好將資源嵌入Jar中。 當您減少需要打包的文件數時,它使部署變得更容易,並使用戶更難以(有點)弄亂它;)

無法識別圖像的路徑,因此可以使用此代碼

jLable1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Client/images/images/button_ok.png"))); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM