问题描述
简而言之,这是我的目标:
- 将照片比例缩放到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文件等中获取它们,并且避免了当前工作目录的任何问题。