如何在Java小程序中显示位图图像?

bey*_*rss 2 java applet swing image

我很难弄清楚如何在Java applet中显示Image(或ImageIcon).以下是我的代码.图片(test.bmp)确实存在并且在D驱动器上,但是当我运行它时,我得到的applet窗口中没有任何内容.有人可以告诉我我缺少什么来制作ImageIcon节目吗?

public class Form1 extends JApplet {
    ImageIcon i;

    public void init(){
        i = new ImageIcon("D:\test.bmp");
    }

    public void paint(Graphics g){
        i.paintIcon(this, g, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,史蒂夫.

aka*_*okd 7

从服务器运行applet时,通过绝对本地文件路径引用映像可能不起作用.使用ImageIcon(URL位置)构造函数并使 URL指向服务器上的图像资源.使用JApplet.getCodeBase()确定applet的来源,并将文件名附加到其中.

public class Form1 extends JApplet {
    Image i;

    public void init() {
        try {
            i = ImageIO.read(new URL(getCodeBase(), "test.bmp"));
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void paint(Graphics g) {
        g.drawImage(i, 0, 0, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑: ImageIO支持BMP,更改的示例适合我.

编辑2:如果它仍然没有显示图像,请尝试"../test.bmp",因为当您运行applet时,让我们说Eclipse将bin目录作为代码库.

编辑3:如果将test.bmp放入jar或类路径中,可以使用相同的方式加载它,但是替换

new URL(getCodeBase(), "test.bmp")
Run Code Online (Sandbox Code Playgroud)

Form1.class.getResource("test.bmp")
Run Code Online (Sandbox Code Playgroud)


Jas*_*rue 5

首先,正确地将\ _ \作为\\的转义可能是个好主意.

编辑添加:您可能希望学习与Path.combine(或File.join)相当的语言(或库),这是一种获取文件路径部分列表并将它们与适合平台的路径分隔符相结合的方法.或者您可以在Java中快速编写它,因为File.pathSeparator中记录了路径分隔符.

(在我的脑海中,我不知道正斜杠总是在ImageIcon中工作,但请注意另一个表明这一点的响应).

此外,请确保您要加载支持的文件类型,例如.png,.gif或.jpg.JDK 1.5中可能支持BMP

此外,如果您在Applet上下文中运行,则由于沙盒规则,您可能无法访问相关路径.在这种情况下,使其在与托管applet的HTML文件相同的路径中可用(可能在Jar的路径中,如果内存为我提供),并使用相对路径.