如何避免在使用getScaledInstance进行键入后得到空指针引用?

问题描述

简而言之,这是我的目标:

  • 将照片比例缩放到jPanel。最好的
  • 它可以同时切换照片。 (我正在使用jLabels来获取图标)

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 

解决方法

您的异常处理是问题所在。

您的异常处理程序说:

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

那很少是正确的举动。

处理异常的最佳方法是实际处理它。记录它无法处理。

如果您无法处理它(在这种情况下,嘿,您如何“处理”不存在的关键文件?-您不这样做,这是不合理的。没人希望您编写处理该问题的代码。类文件的一半也被删除了,对吗?)-那么正确的选择是直接将其继续-将throws添加到您的方法中。如果您做不到,那么正确的答案是:

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

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

要解决实际问题,请执行以下操作:如果您拥有静态资源(例如,用于用户界面的草莓图像),则将其放在类文件的最终位置,并使用YourClass.class.getResource("strawberry.jpg")进行查找。 ;这使用了Java用于查找应用程序类文件的相同机制,即,它甚至可以从jar文件等中获取它们,并且避免了当前工作目录的任何问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...