如何在模块化 java 应用程序中使用 SynthLookAndFeel?

How to use SynthLookAndFeel in a modular java application?

我正在尝试使用 SynthLookAndFeel class 但无法在我的模块化应用程序中使用它。

我回到了官方Synth Application sample from the Java Tutorial page on The Synth Look And Feel的基础,并添加了一个包含以下内容的module-info.java文件:

module SynthApplication {
    requires java.desktop;
}

构建正常,但是当 运行 时,控制台显示 NullPointerException 堆栈跟踪指向 java.desktop/sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:653),并且仅显示空白 window。

问题似乎出在 L&F 的 buttonSkin.xml 定义中引用的图像(例如 images/button.png)的分辨率:图像路径被转换为伪包名称( lookandfeel.images) 未导出到 java.desktop 模块。

我尝试将 exports lookandfeel; 添加到 module-info.java => 同样的错误

我试图将 exports lookandfeel.images; 添加到 module-info.java => 构建错误 Error:(4, 24) java: package is empty or does not exist: lookandfeel.images

有没有办法使图像分辨率正常工作,或者 SynthLookAndFeel 是否与 java 模块完全不兼容?

谢谢。维克纳

注意:我使用的是 openJdk 14

好的,在 JDK 中挖掘更多代码后,我发现它测试了模块是否为 "open"(又名开放自省)。所以我尝试将模块声明为 "open" 如下:

open module SynthApplication {
    requires java.desktop;
}

太棒了。

好的,学到了一些东西:SynthLookAndFeel 必须是开放模块的一部分才能工作。

希望对大家有帮助。