我的图像图标有问题。我知道以前已经有人问过这个问题,但是我想不出解决办法,因为我认为我的问题有所不同。当我使用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)

最佳答案

好吧,总结一下以前给出的答案:
我猜可能的解决方案是使用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(无构建工具),则此链接可能会有所帮助: Copying data files upon build in Java/Eclipse。它主要是为Eclipse编写的,但是我想大多数其他IDE应该提供类似的选项。

从我当前的项目中,我还建议使用Maven之类的工具。对于较小的项目,可能需要花些时间才能完成,但是这需要大量工作(例如,库处理,图像等资源的处理等)。这些只是对您可能有用的某些部分。如果您对此感兴趣,我猜您会在Web上找到很多有用的资源,因为Maven(或其他工具,例如Ant和Gradle)非常常用。

09-10 06:06
查看更多