6

我想使用来自 IntelliJ IDEA 的Maven 运行 HelloWorld JavaFX 11 应用程序,并使用运行/调试配置来调试应用程序。

我在 IntelliJ IDEA 中使用pom.xmlHelloFX.java创建了一个 Maven 项目。我可以成功构建项目并运行它执行指定的compile目标exec:java

但是当我使用带有 VM 选项的运行/调试配置运行它时--add-modules=javafx.controls,我得到:

启动层初始化时出错
java.lang.module.FindException: Module javafx.controls not found

我设法运行它的唯一方法是下载JavaFX 运行时并将 VM 选项设置为--module-path /path/to/javafx-sdk-11/lib --add-modules=javafx.controls.

但是有没有办法使用从 Maven 下载的工件来运行它?正如我认为 IntelliJ IDEA 可以在运行时使用 Maven 工件一样。还是我只是弄错了什么?

PS我知道这个答案,但它没有描述我想要做什么。

4

2 回答 2

3

我想我可能终于找到了解决方案。

我假设您正在使用 Maven 导入 javafx-maven-plugin 以及 javafx-controls 依赖项,就像我尝试做的那样(最终,jona303 的答案没有修复),并且您已经尝试使用 javafx:ru​​n 运行它时遇到问题/烦恼。

好吧,不使用 --add-exports 和其他东西的解决方案实际上相当简单。使用适当的、基于 Java 的 main 方法创建一个额外的类(我称之为“Launcher”)。然后,在课堂上,从那里启动您的应用程序,如下所示:

发射器类

public class Launcher {

    public static void main(String[] args) {
        Application.launch(App.class, args);
    }

}

应用类

public class App extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        // app code
    }

}

我很确定这个问题是由 IntelliJ 试图“聪明”引起的,并在没有 main 方法的情况下启动应用程序,直接跳转到 start 方法。但是通过这样做,它以某种方式避免了添加 Maven 依赖项并导致它失败。当你这样做时,它会强制 IntelliJ 说“好的,我们需要 maven 依赖项,然后我们可以运行它”,正确启动它(因为它不知道它是一个 JavaFX 项目)。但这只是一个猜测。我只知道它对我有用。

我花了很长时间才弄清楚这一点,但是一旦我将运行配置设置为使用我的 Launcher 类而不是我的 App 类启动,一切都像魅力一样无缝运行(即使调试也有效!)。

希望这会有所帮助,并祝您编码愉快!:)

于 2020-01-28T04:41:06.730 回答
-1

如果只是为了使用运行/调试按钮,您可以使用 Maven 配置 用于 IntelliJ JavaFX 运行的 Maven 配置

于 2019-03-15T21:47:15.233 回答