Search code examples
javaclassresourcesclassloaderjava-10

URLImageSource is failing with Java 10 but not Java 8


My Java application was working fine with Java 8 but now with Java 10 is failing due to this line

setIconImage(Toolkit.getDefaultToolkit().createImage(Icon.class.getResource("/icon/songkong20.png")));

The image referred to exists and is displayed when using Java 8.

This causes this exception

java.lang.NullPointerException
    at java.desktop/sun.awt.image.URLImageSource.getConnection(URLImageSource.java:101)
    at java.desktop/sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:111)
    at java.desktop/sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)
    at java.desktop/sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:212)
    at java.desktop/sun.awt.image.ImageFetcher.run(ImageFetcher.java:176)

Solution

  • The problem was that I calling getResource() for a file in my module, but calling it on a system class (Icon.class) and this is not allowed from Java 9 onwards.

    Changing

    Icon.class.getResource("/icon/songkong20.png")));
    

    to

    SongKong.class.getResource("/icon/songkong20.png")));
    

    fixed the issue.