1

我正在尝试使用SynthLookAndFeel该类,但无法使其在我的模块化应用程序中工作。

我使用 The Synth Look And Feel 上 Java 教程页面中的官方Synth 应用程序示例回到基础,并添加了一个包含以下内容的文件:module-info.java

module SynthApplication {
    requires java.desktop;
}

它构建正常,但是在运行时,控制台显示NullPointerException指向 的堆栈跟踪java.desktop/sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:653),并且只显示一个空白窗口。

问题似乎在于L&F 定义images/button.png中引用的图像(例如 )的分辨率:图像路径被转换为不导出到模块buttonSkin.xml的伪包名称( )。lookandfeel.imagesjava.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

4

1 回答 1

2

好的,在 JDK 中挖掘更多代码后,我发现它测试了模块是否“开放”(也就是对自省开放)。所以我尝试将模块声明为“打开”,如下所示:

open module SynthApplication {
    requires java.desktop;
}

哇哦,它奏效了。

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

希望它可以帮助别人。

于 2020-05-15T22:45:50.670 回答