1

我目前正在编写一个程序,我需要将其作为 jar 发送给朋友。该程序具有需要加载的图像才能使程序正常工作,我希望它们全部包含在一个 jar 中。目前它不适用于可执行 jar 或当我通过命令行运行它时。但是它在netbeans中工作。

这是我正在使用的代码:

要加载我正在使用的图像:

protected ImageIcon createImageIcon(String path, String description)
{
 java.net.URL imgURL = getClass().getClassLoader().getResource(path);
 if (imgURL != null)
 {
     return new ImageIcon(Toolkit.getDefaultToolkit()
                  .getImage(imgURL),description);
 }
 else
 {
     System.err.println("Couldn't find file: " + path);
     return null;
 }
}

对于我也试过的网址

 getClass().getResource(path)

应该创建图像的行是:

this.img =createImageIcon(File.separator+"."+File.separator
           +"resources"+File.separator+"tiles"+File.separator+"tile.png","tile");

我的 jar 文件设置了包含类文件的文件夹和位于其顶层的资源文件夹。

我已经四处寻找解决此问题的方法,但找不到任何可行的方法。

谢谢。

4

3 回答 3

2

您的 URL 将评估为"/./resources/tiles/tile.png"哪个没有意义(但也许ClassLoader从 NetBeans 运行时使用的那个可以容忍错误。)
尝试删除初始的"/./". 此外,您不需要引用,File.separator因为字符串被视为相对 URL,并且正斜杠始终有效。

于 2011-01-13T00:39:03.237 回答
1

而不是使用/./resources/back_img.png,使用resources/back_img.pngwith ClassLoader
这是示例:

    String path = "resources/back_img.png";
    ClassLoader cl = ImageHandler.class.getClassLoader();
    URL imgURL = cl.getResource(path);
    //URL imgURL = ImageHandler.class.getResource(path);

    if (imgURL != null) {
        ImageIcon icon = new ImageIcon(imgURL, description);
        Image img = icon.getImage();
        Image sizedImg = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
        return new ImageIcon(sizedImg);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
于 2011-10-06T06:10:22.200 回答
0

尽管有其他任何事情,您的代码都具有失败缓慢的令人羡慕的特性。

尝试类似的东西

URL x = get class.getclassloader.getresource(...)
If x == null
   Throw new defect "expected ... But it wasn't there"

很抱歉格式化,但 iPad 很难做到这一点。

于 2011-01-13T00:41:46.223 回答