I'm trying to use the SynthLookAndFeel class but cannot make it work in my modular application.
I went back to basics with the official Synth Application sample from the Java Tutorial page on The Synth Look And Feel, and just added a module-info.java file with the following contents:
module SynthApplication {
requires java.desktop;
}
It builds OK, but when run, the console shows a NullPointerException stack trace pointing to java.desktop/sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:653), and only a blank window is displayed.
The issue seems to lie in the resolution of the images (e.g. images/button.png) that are referenced in the buttonSkin.xml definition of the L&F: Image paths are converted to a pseudo-package name (lookandfeel.images) which is not exported to the java.desktop module.
I tried to add exports lookandfeel; to module-info.java => same error
I tried to add exports lookandfeel.images; to module-info.java => build error Error:(4, 24) java: package is empty or does not exist: lookandfeel.images
Is there a way to make the image resolution work or is SynthLookAndFeel purely incompatible with java modules ?
Thanks. Vicne.
Note: I'm using openJdk 14
OK, after more code digging in the JDK, I discovered that it tested if the module was "open" (aka open to introspection). So I tried to declare the module as "open" as follows:
And woo-hoo it worked.
OK, learned something:
SynthLookAndFeelmust be part of an open module to work.Hope it can help others.