Toolkit.getImage(URL url) 与 Java 8 一起工作,但与 Java 11 一起失败
Toolkit.getImage(URL url) works with Java 8 but fails with Java 11
我在使用 Java SE Swing 应用程序时遇到问题。它在 Java 8 和 11 上都编译得很好,但在这些行中后者失败了:
URL url = Object.class.getResource("/org/mozillatranslator/resource/mt_icon_small.gif");
Toolkit tk = Toolkit.getDefaultToolkit();
Image img = tk.getImage(url); // Raises runtime exception
除此之外:
Caused by: java.lang.NullPointerException
at java.desktop/sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:653)
at java.desktop/sun.awt.SunToolkit.getImage(SunToolkit.java:689)
at org.mozillatranslator.gui.MainWindow.loadIcon(MainWindow.java:232)
正如我所说,该行在 Java 8 上有效,但在 Java 11 上失败,具有完全相同的 JAR。我已经搜索了 8 以上版本中 Java 行为的变化,但我没有找到任何东西。有没有人遇到过类似的情况,或者可以提出任何可能的解决方法?
使用
URL url = <YourClassName>.class.getResource("/org/mozillatranslator/resource/mt_icon_small.gif");
或
URL url = Thread.currentThread()
.getContextClassLoader()
.getResource("org/mozillatranslator/resource/mt_icon_small.gif");
Object
是 loaded by bootstrap class loader, so Object.class.getResource()
uses system class loader.
使用空字符串参数检查 return 个值; Object.class.getResource("")
、YourClass.class.getResource("")
和 Thread.currentThread().getContextClassLoader().getResource("")
。
我在使用 Java SE Swing 应用程序时遇到问题。它在 Java 8 和 11 上都编译得很好,但在这些行中后者失败了:
URL url = Object.class.getResource("/org/mozillatranslator/resource/mt_icon_small.gif");
Toolkit tk = Toolkit.getDefaultToolkit();
Image img = tk.getImage(url); // Raises runtime exception
除此之外:
Caused by: java.lang.NullPointerException
at java.desktop/sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:653)
at java.desktop/sun.awt.SunToolkit.getImage(SunToolkit.java:689)
at org.mozillatranslator.gui.MainWindow.loadIcon(MainWindow.java:232)
正如我所说,该行在 Java 8 上有效,但在 Java 11 上失败,具有完全相同的 JAR。我已经搜索了 8 以上版本中 Java 行为的变化,但我没有找到任何东西。有没有人遇到过类似的情况,或者可以提出任何可能的解决方法?
使用
URL url = <YourClassName>.class.getResource("/org/mozillatranslator/resource/mt_icon_small.gif");
或
URL url = Thread.currentThread()
.getContextClassLoader()
.getResource("org/mozillatranslator/resource/mt_icon_small.gif");
Object
是 loaded by bootstrap class loader, so Object.class.getResource()
uses system class loader.
使用空字符串参数检查 return 个值; Object.class.getResource("")
、YourClass.class.getResource("")
和 Thread.currentThread().getContextClassLoader().getResource("")
。