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");

Objectloaded by bootstrap class loader, so Object.class.getResource() uses system class loader.

使用空字符串参数检查 return 个值; Object.class.getResource("")YourClass.class.getResource("")Thread.currentThread().getContextClassLoader().getResource("")