1

我正在尝试在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); 
4

1 回答 1

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"); 
    }
} 

您可能会发现执行自定义绘画阅读/加载某些用途的图像。

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

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

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

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

System.out.println(TestReference.class.getResource("myimage.jpg"));
System.out.println(TestReference.class.getResource("/myimage.jpg"));
于 2013-07-27T02:53:30.660 回答