Java - 如何访问applet jar中打包的图像

时间:2011-10-09 14:16:40

标签: java jar applet

我创建了一个applet jar。该jar包含以下文件夹中的图像

com\common\images\red.bmp

现在,我想在Swing Applet上显示这个图像。

private static final ImageIcon redIndicator = new ImageIcon("com\\common\\images\\red.bmp");

之后,我已将 redIndicator 附加到JPanel,但我无法看到此图片。

有什么建议吗?

================================== EDITED ============ =============================

private static final ImageIcon marker = loadImage("com/common/images/scale.jpg");

@SuppressWarnings("unused")
private static ImageIcon loadImage(String imagePath) {

    BufferedInputStream imgStream = new BufferedInputStream(TpcHandler.class.getResourceAsStream(imagePath));
    int count = 0;

    if (imgStream != null) {

        byte buf[] = new byte[2400];

        try {
            count = imgStream.read(buf);
        } catch (java.io.IOException ioe) {
            return null;
        } finally {
            if (imgStream != null)
                try {
                    imgStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

        if (count <= 0) {
            LOGGER.warning("Empty image file: " + imagePath);
            return null;
        }

        return new ImageIcon(Toolkit.getDefaultToolkit().createImage(buf));
    } else {
        LOGGER.warning("Couldn't find image file: " + imagePath);
        return null;
    }
}

我收到以下异常

java.io.IOException: Stream closed

在第count = imgStream.read(buf);

3 个答案:

答案 0 :(得分:2)

这应该可以解决问题(如果从同一个jar加载的类中调用):

new ImageIcon(getClass().getResource("/com/common/images/red.bmp"))

答案 1 :(得分:1)

使用YourPanel.class.getResourceAsStream("/com/common/images/red.bmp"),将流读取到byte[]并根据该ImageIcon构建{{1}}。 (并且不要使用bmps - 更喜欢png或jpeg)

答案 2 :(得分:0)

小应用程序和图像是一个常见问题所以,对于Java applet和图像,我建议你阅读one of my previous answers希望它有所帮助:)

祝你好运