无法在JFrame中显示JPEG图像

时间:2013-07-27 01:31:21

标签: java image swing embedded-resource imageicon

我正在尝试为我正在编程的小游戏在JFrame上显示背景图像。图像是.jpg,我不断收到这些错误:

Exception in thread "main" java.lang.NullPointerException
     at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
     at web.game.Base.<init>(Base.java:45)
     at web.game.Base.main(Base.java:61)

我的代码是:

Image myimage;

public Base() {
    ImageIcon ii = new ImageIcon(this.getClass().getResource("myimage.jpg"));
    myimage = ii.getImage();
}

public void paint(Graphics g) {

    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(myimage, 10, 10, null); 

1 个答案:

答案 0 :(得分:3)

您可能遇到问题的原因有很多。最明显的开始,图像不存在(或者至少不存在你认为它存在的地方)

private BufferedImage myImage;

public Board() { 
    try {
        myimage = ImageIO.read(this.getClass().getResource("/myimage")); 
    } catch (IOException exp) {
        exp.printStackTrace();
    }
} 

protected void paintComponent(Graphics g) { 
    super.paintComponent(g);
    if (myImage != null) {
        Graphics2D g2d = (Graphics2D) g; 
        g2d.drawImage(myimage, 10, 10, this); 
        System.out.println("Background Image"); 
    }
} 

您可能会发现某些用途Performing Custom PaintingReading/Loading an Image

使用getResource时,您有两个(基本)选择。相对或绝对。

使用相对路径,类加载器将根据类的上下文开始搜索。因此,如果您的图像位于项目的根文件夹中,但您的类位于子文件夹(包)中,则相对路径将不起作用,因为类加载器将从类所在的位置开始搜索。

绝对路径允许您从类路径的根搜索,这将更有帮助,尤其是在您的情况下。

尝试这样的事情,看看你得到了什么..

System.out.println(TestReference.class.getResource("myimage.jpg"));
System.out.println(TestReference.class.getResource("/myimage.jpg"));