【问题标题】:Java swing app can't find imageJava Swing应用程序找不到图像
【发布时间】:2010-04-17 13:33:47
【问题描述】:

我正在用swing gui在java中为学校制作鱼雷游戏,请参阅压缩源HERE

我使用存储在 /bin/resource/graphics/default 文件夹的子文件夹中的图像的自定义按钮图标和鼠标光标,其中根文件夹是程序的根文件夹(它也将是最终 .jar 中的根目录)假设)除了“bin”之外,它还包含一个包含所有类的“main”文件夹。资源的相对路径存储在 MapStruct.java 的 shipPath 和 mapPath 变量中。 现在 Battlefield.java 的 PutPanel 类发现它们没问题,并很好地设置了按钮的图标,但其他所有类都无法获取它们的图标,例如Table.java 的 setCursor,它应该为所选船的图像或 Field.java 的 this.button.setIcon(icon) 的所有元素设置鼠标光标;在构造函数中,应该设置“水”按钮的图标。

我通过调试观察了发生的情况,加载后图像保持为空,尽管路径似乎是正确的。我也尝试在图像文件夹中编写一个测试文件,但该方法返回一个 filenotfound 异常。我试图获取类的路径以查看它是否从假定的位置运行,并且似乎确实如此,所以我现在真的找不到问题。

谁能帮帮我? 谢谢。

【问题讨论】:

标签: java image swing file-not-found


【解决方案1】:

你需要像这样加载图标:

ClassLoader cl= this.getClass().getClassLoader();
URL imageURL   = cl.getResource("resources/...");
ImageIcon icon = new ImageIcon(imageURL);

您需要将资源文件夹添加到 Eclipse 的类路径中。请注意,该路径不是文件路径,如果您决定将应用程序捆绑到 jar 文件中,它将起作用。

【讨论】:

  • 感谢,对于缺少 cmets 感到抱歉
  • 看起来资源只能放在包结构中。因此,如果我将 images\a.png 放在 Eclipse 中的 Test.java 文件旁边,它就可以工作。
【解决方案2】:
btnRegistration.setIcon(createImageIcon("reg.png"));

protected ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = Master.class.getClassLoader().getResource(path);
    if (imgURL != null) {
    return new ImageIcon(imgURL);
    } else {
    System.out.println("Couldn't find file: " + path);
    return null;
    }
}

这里 btnRegistration 是我的 JButton 师父是我的班 reg.png 是属于我的项目的图像

【讨论】:

  • 如果您对集成此方法有疑问,请在此处评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2015-04-23
  • 2013-02-01
  • 1970-01-01
  • 2013-02-08
  • 2012-02-14
相关资源
最近更新 更多