![](/img/trans.png)
[英]Why does new File(path) doesn't work when I run my application from 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.