我第一次尝试使用 Netbeans、Maven 和 JavaFXML 开发小型桌面应用程序。我选择使用使用 Ant 开发的应用程序的早期版本,并使其在 Maven 中运行。然而,在我的一个 java 类中,Maven 版本将
javax.swing.filechooser.FileSystemView
的导入标记为
package javax.swing.filechooser is not visible. Package javax.swing.filechooser is declared in module java.desktop but module myapp does not read it.
之前的版本没有出现这个问题。我搜索了这个论坛、Oracle 论坛和许多网络搜索来寻找解决方案,但没有成功。我希望能得到一些帮助来解决这个问题。
我已经搜索了这个论坛、Oracle 论坛和许多网络搜索来寻找解决方案,但没有成功。我希望找到像“从这里下载 swing API”这样的答案,但似乎没有办法做到这一点。不管怎样,Maven 的项目属性没有用于导入库的 ClassPath 选项。我希望能得到一些帮助来解决这个问题,因为说实话,我自己不知道如何做到这一点。
您可能需要在您的
module-info.java
中使用此行:
requires java.desktop;
java.desktop
是 Swing 类所在的模块。 模块化项目需要访问它才能使用它。 非模块化项目不需要这样做,因为它们从类路径中读取所有内容并且没有模块化。 所有旧的 Java 应用程序都是非模块化的,因为模块仅在 Java 9 中引入。
Java 23 的 Swing 仍然是标准 JDK 和运行时的一部分。 它的所有代码都已移至
java.desktop
模块中,并且可在基本 Java 运行时映像中使用。 因此,您不需要像大多数 JavaFX 发行版那样从外部下载 Swing 的 java.desktop
模块依赖项并将它们添加到模块路径中。
虽然
java.desktop
模块的要求可能会解决您的直接模块访问问题,但我建议不要这样做。 最好重构您的代码,不要使用 Swing,而只使用 JavaFX。 混合 JavaFX 和 Swing 是可能的,但是尝试这样做会遇到很多陷阱,所以如果可以避免的话,我不建议这样做。