簡體   English   中英

Jar無法顯示圖片

[英]Jar won't display Images

我的圖像圖標有問題。 我知道之前已經有人問過這個問題,但是我想不出解決辦法,因為我認為我的問題有所不同。 當我使用Eclipse啟動應用程序時,所有工作正常。 但是,當我將其制成可運行的jar時,它將不會顯示圖像。

我的ImagesHolder類的一些代碼:

package Clicker;

import javax.swing.ImageIcon;

public class ImagesHolder {

       final public ImageIcon AccessoriesIcon = new ImageIcon("Images/Part_Accessories.png");
       final public ImageIcon BodyIcon = new ImageIcon("Images/Part_Body.png");
       final public ImageIcon BrakesIcon = new ImageIcon("Images/Part_Brakes.png");
       final public ImageIcon CoolingIcon = new ImageIcon("Images/Part_Cooling.png");
       final public ImageIcon ElectronicsIcon = new ImageIcon("Images/Part_Electronics.png");
       final public ImageIcon EngineIcon = new ImageIcon("Images/Part_Engine.png");
       final public ImageIcon ExaustIcon = new ImageIcon("Images/Part_Exaust.png");
       final public ImageIcon FuelIcon = new ImageIcon("Images/Part_Fuel.png");
       final public ImageIcon InteriorIcon = new ImageIcon("Images/Part_Interior.png");
       final public ImageIcon SteeringIcon = new ImageIcon("Images/Part_Steering.png");
       final public ImageIcon SuspensionIcon = new ImageIcon("Images/Part_Suspension.png");
       final public ImageIcon TransmissionIcon = new ImageIcon("Images/Part_Transmission.png");
       final public ImageIcon TiresIcon = new ImageIcon("Images/Part_Tires.png");

而且,如果我將“圖片”設置為網址,則無法重置圖片圖標,例如此處(我有“標簽”,但我想更改標簽圖標)

標簽示例:

   public JLabel AccessoriesLVL1Label = new JLabel(ImagesHolder.LockedIcon);
   AccessoriesLVL1Label.setHorizontalTextPosition(JLabel.CENTER);
        AccessoriesLVL1Label.setVerticalTextPosition(JLabel.BOTTOM);
        AccessoriesLVL1Label.setText("<html>Accessories LVL 1<br>" + "Count: " + Part.parts[1]);

並更改:

if(CarMain.main[5] >=1){
            jbtnSellAccessoriesLv1.setEnabled(true);      
            Labels.AccessoriesLVL1Label.setIcon(ImagesHolder.AccessoriesIcon);         
        }

編輯:如果我這樣:

final public ImageIcon MoneyIcon = new ImageIcon("Images/Money.png"); 

做為:

URL MoneyIcon = ImagesHolder.class.getResource("/Money.png");

我在這一行出現錯誤:

Labels.MoneyLabel.setIcon(ImagesHolder.MoneyIcon);

錯誤:

The method setIcon(Icon) in the type JLabel is not applicable for the arguments (URL)

有一種從jar文件獲取圖像的替代方法:

理想的方法是在項目根目錄下有一個資源目錄,並將其包含在源代碼目錄列表中。 這將導致將所有圖像復制到JAR中。 如果在其中創建一個子目錄(資源/圖像),那么最終將得到一個具有圖像目錄的JAR。 您可以通過類加載器訪問這些圖像:

classloader.getResourceAsStream("/image/image1.jpg");

要么,

classloader.getResource("/image/image2.jpg");

有關詳細示例,請參考鏈接。

好吧,總結一下先前給出的答案:我想一個潛在的解決方案是使用Dark Knight建議的classloader 此外,您只需要在設置它之前創建一個新的ImageIcon

URL MoneyIcon = ImagesHolder.class.getResource("/Money.png");
Labels.MoneyLabel.setIcon(new ImagesIcon(ImagesHolder.MoneyIcon));

因為如果您再次瀏覽代碼,我認為這在一定程度上是行不通的。 我的意思是您想設置一個ImageIcon ,但您最后擁有的是一個URL對象。 必須拋出錯誤應該是有道理的。 但是正如安德魯·湯普森(Andrew Thompson)所說的那樣:您可以按照上面顯示/解釋的那樣從該URL構造一個ImageIcon

而且,由於您還解釋了目錄的問題(從源代碼獲取結構到編譯的目錄),因此我想添加一些鏈接以供進一步閱讀:如果僅使用“純Java”(無構建工具),則此鏈接可能會有所幫助: 在Java / Eclipse中構建時復制數據文件 它主要是為Eclipse編寫的,但是我想大多數其他IDE應該提供類似的選項。

從我目前的項目中,我還建議使用Maven之類的工具。 對於較小的項目,可能要花一些時間,但是需要大量工作(例如,庫處理,圖像等資源的處理等)。 這些只是對您可能有用的某些部分。 如果您對此感興趣,我猜您會在Web上找到很多有用的資源,因為Maven(或其他工具,例如Ant和Gradle)非常常用。

暫無
暫無

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

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