使用带有Jar的图像面板

时间:2011-12-05 12:52:12

标签: java swing jar

当我打包它是一个罐子时,我无法显示我的ImagePanel。当我从Eclipse运行项目时它显示得很好。这是创建ImagePanel的行:

ImagePanel panel = new ImagePanel(this.getClass().getClassLoader()
    .getResource("edu/luc/tictactoe/gui/resources/images/UIMM.png"));
frame.setContentPane(panel);

这是ImagePanel类:

@SuppressWarnings("serial")
public class ImagePanel extends JPanel {

    BufferedImage img;

    public ImagePanel(URL url) {
        super(true);
        this.setToolTipText(url.getPath());
        try {
            img = ImageIO.read(new File(url.getPath()));
            this.setPreferredSize(new Dimension(
                img.getWidth(), img.getHeight()));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
    }
}

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

img = ImageIO.read(new File(url.getPath()));  // REMOVE!

试试这个..

img = ImageIO.read(url);

顺便说一句 - 当出现问题时,不要盲目地绊倒正在发生的事情。最好使用调试器并检查传递的实际值,或者至少使用System.out.pritln()作为完整性检查。 E.G。

import java.net.URL;

class URLTest {

    public static void main(String[] args) throws Exception {
        URL url = new URL("jar:file:/C:/baz.jar!/COM/foo/Quux.class");
        System.out.println(url);
        System.out.println(url.getPath());
    }
}

输出

jar:file:/C:/baz.jar!/COM/foo/Quux.class
file:/C:/baz.jar!/COM/foo/Quux.class

现在告诉我。路径甚至看起来像文件名/路径

如有疑问。打印出来。

答案 1 :(得分:0)

你需要把它变成一个jar,在你创建它的文件夹中,在一个名为“edu”的文件夹中,在那个“资源”中的那个“gui”中名为“tictactoe”的文件夹中图像“最后,制作一张名为”UIMM.png“的照片

换句话说,在jar中的文件夹中创建相同的文件夹结构。

我也有同样的问题 p.s我认为你正在使用mac,如果你是,用Jar Bundler应用程序捆绑它,它是mac的最佳捆绑器