getImage(URL)适用于Java8,但不适用于Java11

getImage(URL)适用于Java8,但不适用于Java11,java,java-8,nullpointerexception,embedded-resource,java-11,Java,Java 8,Nullpointerexception,Embedded Resource,Java 11,我在Java SE Swing应用程序中遇到问题。它在Java 8和Java 11上都可以很好地编译,但在Java 8和Java 11上编译失败的原因如下: URL url = Object.class.getResource("/org/mozillatranslator/resource/mt_icon_small.gif"); Toolkit tk = Toolkit.getDefaultToolkit(); Image img = tk.getImage(url

我在Java SE Swing应用程序中遇到问题。它在Java 8和Java 11上都可以很好地编译,但在Java 8和Java 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)
正如我所说,该行在Java8上工作,但在使用完全相同的JAR的Java11上失败。我搜索了8以上版本中Java行为的变化,但没有发现任何变化。是否有人遇到过类似情况,或者可以建议任何可能的解决方法?

使用

URL url = <YourClassName>.class.getResource("/org/mozillatranslator/resource/mt_icon_small.gif");
Object
是,所以
Object.class.getResource()
使用

使用空字符串参数检查返回值
Object.class.getResource(“”
YourClass.class.getResource(“”
)和
Thread.currentThread().getContextClassLoader().getResource(“”
,使用

URL url = <YourClassName>.class.getResource("/org/mozillatranslator/resource/mt_icon_small.gif");
Object
是,所以
Object.class.getResource()
使用


使用空字符串参数检查返回值<代码>Object.class.getResource(“”,
YourClass.class.getResource(“”
)和
Thread.currentThread().getContextClassLoader().getResource(“”
)不仅仅是类加载器。自Java9以来,环境负责定位正确模块的资源。因此,您应该对属于正确模块的
对象调用
getResource
。您不应该使用
Thread.currentThread().getContextClassLoader()
。这将再次缺少关于正确模块的任何信息,更糟糕的是,调用某人通过
setContextClassLoader(…)
放置在那里的任意、可更改的类加载器。自Java9以来,环境负责定位正确模块的资源。因此,您应该对属于正确模块的
对象调用
getResource
。您不应该使用
Thread.currentThread().getContextClassLoader()
。这将再次缺少有关正确模块的任何信息,更糟糕的是,调用某人通过
setContextClassLoader(…)
放置在那里的任意、可更改的类装入器。