为什么Java突然在图像上返回空指针异常?

为什么Java突然在图像上返回空指针异常?,java,image,Java,Image,我一直试图通过在面板上绘制BuffereImage并在发生ComponentResistized时重新绘制来创建一个可调整大小的图像。然而,尽管在早期版本中图像加载很好(要么根本没有调整大小,要么没有正确执行),现在Java声称图像不存在。 代码如下 public class Image extends JPanel{ BufferedImage img=null; public Image{ try { img = ImageIO.read(n

我一直试图通过在面板上绘制BuffereImage并在发生ComponentResistized时重新绘制来创建一个可调整大小的图像。然而,尽管在早期版本中图像加载很好(要么根本没有调整大小,要么没有正确执行),现在Java声称图像不存在。 代码如下

    public class Image extends JPanel{
    BufferedImage img=null;

    public Image{
    try {
        img = ImageIO.read(new File("Untitled.png"));
    }
    catch (IOException e) {
    }
    Dimension d=getSize();
    Graphics g=getGraphics();
    g.drawImage(img, 0, 0, d.width, d.height, null);

即使没有组件侦听器,它也会在drawImage上返回NullPointerException。但是我知道图像不是空的,因为它以前工作过,这导致我认为这里的代码有问题

如果这里出了问题:
img=ImageIO.read(新文件(“Untitled.png”)然后在此处绘制空引用对象:

g.drawImage(img, 0, 0, d.width, d.height, null);

这就是NPE的原因,这是由于图形对象g可能为空。
Graphics g=getGraphics()

尝试
System.out.println(新文件(“Untitled.png”).getAbsolutePath())
并检查文件是否确实存在。我的猜测是:它不是。你不应该只转储IOException,至少打印堆栈跟踪,所以用户不,为什么它对他们不起作用。
catch(IOException e){}
永远不要这样做。您的
ImageIO.read
可能引发了一个异常,由于catch块为空,您不知道该异常。此外,不应使用
getGraphics
进行绘制。请参阅。@Radiodef
@Override
public void paintComponent(Graphics g){
g.drawImage(img,0,0,d.width,d.height,null);}
当添加到我的类中时,这样做可以吗?因为不管我给它多大的尺寸,它还是什么都没有显示。drawRect工作得很好,只是它仍然不能与图像一起工作,即使按照Tom的建议,我确保图像在那里。