在使用 getScaledInstance 时如何避免在键入后获得 Null Pointer Dereference?

How to I avoid getting Null Pointer Deference after typing while using getScaledInstance?

为了简短起见,这里是我的 objective:

ps:

BufferedImage img = null;
try {
    img = ImageIO.read(new File("strawberry.jpg"));
} catch (IOException e) {
    e.printStackTrace();
}
Image dimg = img.getScaledInstance(jPanel.getWidth(), jPanel.getHeight(),Image.SCALE_SMOOTH);

我能知道这个错误是关于:

null pointer deference 

你的异常处理有问题。

您的异常处理程序说:

如果出现问题,将一些(但不是全部)关于它的调试信息打印到标准错误,然后继续代码。

这很少是正确的举动。

处理异常的最好方法是实际处理它。记录它并没有处理它。

如果你不能处理它(在这种情况下,嘿,你怎么 'handle' 一个关键文件不在那里? - 你没有,那是不合理的。没有人希望你写处理一半 class 文件的代码也已被删除,对吗?) - 那么正确的选择是将它向前扔 - 添加 throws 到你的方法。如果你做不到,正确的 'uhhh I dunno' 答案是:

} (catch IOException e) {
    throw new RuntimeException("unhandled", e);
}

然后 NPE 就永远不会发生了。相反,您会在此处获得有关实际问题的正确信息,即 strawberry.jpg 不在 JVM 进程的当前工作目录中。

要找到实际问题的解决方案:如果您有静态资源,例如用于用户界面的草莓图像,请将 class 文件放在最后的位置并使用 YourClass.class.getResource("strawberry.jpg") 得到他们;这使用相同的机制 java 用于查找您的应用程序的 class 文件,即它甚至会从您的 jar 文件等中获取它们,并避免当前工作目录出现任何问题。