在使用 getScaledInstance 时如何避免在键入后获得 Null Pointer Dereference?
How to I avoid getting Null Pointer Deference after typing while using getScaledInstance?
为了简短起见,这里是我的 objective:
- 将照片缩放到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
你的异常处理有问题。
您的异常处理程序说:
如果出现问题,将一些(但不是全部)关于它的调试信息打印到标准错误,然后继续代码。
这很少是正确的举动。
处理异常的最好方法是实际处理它。记录它并没有处理它。
如果你不能处理它(在这种情况下,嘿,你怎么 '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 文件等中获取它们,并避免当前工作目录出现任何问题。
为了简短起见,这里是我的 objective:
- 将照片缩放到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
你的异常处理有问题。
您的异常处理程序说:
如果出现问题,将一些(但不是全部)关于它的调试信息打印到标准错误,然后继续代码。
这很少是正确的举动。
处理异常的最好方法是实际处理它。记录它并没有处理它。
如果你不能处理它(在这种情况下,嘿,你怎么 '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 文件等中获取它们,并避免当前工作目录出现任何问题。