如何在 Java 11 中将 JavaFX 运行时添加到 Eclipse?

新手上路,请多包涵

我收到以下错误,因为 Java 11 将 JavaFX 排除在最新版本之外。

 Error: JavaFX runtime components are missing, and are required to run
this application

那么如何在 Java 11 中将 JavaFX 添加到 Eclipse 中呢?谢谢。

原文由 user3520615 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 774
2 个回答

按照 入门指南,这些是从 Eclipse 运行 JavaFX 11 所需的步骤。

  1. 这里 安装 Eclipse 2018-09。

  2. 这里 安装 JDK 11。

  3. 将 Java 11 作为已安装的 JRE 添加到 Eclipse:Eclipse -> Window -> Preferences -> Java -> Installed JREs -> Add。

  4. 这里 下载 JavaFX 11 ea。

  5. 创建用户库:Eclipse -> Window -> Preferences -> Java -> Build Path -> User Libraries -> New。将其命名为 JavaFX11 并将 jars 包含在 JavaFX 11-ea 的 lib 文件夹下。

  6. 创建一个 Java 项目。您不需要添加模块路径类。确保选择 Java 11 并将 JavaFX11 库添加到项目的模块路径中。

  7. 添加一个包 javafx11 和主要应用类 HelloFX

     package javafx11;

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Label;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;


    public class HelloFX extends Application {

        @Override
        public void start(Stage stage) {
            String version = System.getProperty("java.version");
            Label l = new Label ("Hello, JavaFX 11, running on "+version);
            Scene scene = new Scene (new StackPane(l), 300, 200);
            stage.setScene(scene);
            stage.show();
        }

        public static void main(String[] args) {
            launch();
        }

    }

请注意,编辑器不应该抱怨 JavaFX 类,因为我们已经包含了用户库。

  1. 添加运行时参数。编辑项目的运行配置,并添加以下 VM 参数:

    –module-path C:\Users<用户>\Downloads\javafx-sdk-11\lib –add-modules=javafx.controls

  2. 最后,运行项目。它应该工作正常。

原文由 José Pereda 发布,翻译遵循 CC BY-SA 4.0 许可协议

我想分享我关于启动 javafx 11 应用程序的发现。我说的是现有的遗留 javafx 应用程序,最初是在没有模块的情况下开发的(例如,w/Java 8)。

IMO 最有趣的方法是下面的 方法 #2b ,它需要最少的更改, 即它不需要 -module-path 参数。我提到我正在使用 maven,所以请参见。以前的答案第一步是在你的 pom.xml 中添加对javafx的依赖。例如:

 <dependency>
  <groupId>org.openjfx</groupId>
  <artifactId>javafx-controls</artifactId>
  <version>11.0.2</version>
</dependency>

为了启动,我找到了几个选项:

1a) 从命令行使用 maven 启动

在你的 pom.xml 中配置一个像这样的部分:

     <build>
        <plugins>
            ...
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>org.openjfx.hellofx.MainApp</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

在此之后,您可以从控制台窗口运行 mvn exec:java ,这应该会启动应用程序。 Maven 将负责将所有条目从 类路径 添加到 模块路径。我提醒 Eclipse 中的 CTRL + ALT + T 快捷方式,它直接在 IDE 中打开一个终端窗口。

1b) 使用 maven 启动,但作为 Eclipse 启动配置

右键单击项目 > Run As > Maven Build…。 然后在 目标 文本框中输入 exec:java 。与之前方法相比的 优势:与 Eclipse 的集成度更高。并且调试方便。您只需要在调试模式下重新启动启动配置即可。我可以提醒一下,Eclipse 启动配置可以作为 .launch 文件直接存储在项目目录(repo)中,因此可以由同事共享/重用。使用 Edit Configuration 窗口中的最后一个选项卡 Common

2a) 使用 Eclipse 启动并使用变量指定 -module-path

右键单击主类 > Run As > Java Application 。第一次点击会创建一个新的启动配置;可能它不会工作,所以你需要编辑它(例如工具栏中的**运行按钮(带播放图标)>运行配置>选择与你的班级对应的那个。或者 CTRL + click 就可以了点击 播放 后)。

然后在 Arguments > VM arguments 中添加:

 --module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml

所以这里的技巧是使用 ${project_classpath} 变量。因为否则你应该需要准确地写出通往 javafx jar 的路径,它位于你的 .m2 库中的某个地方。这样做会使启动配置不容易被同事重复使用。

2b) 使用 Eclipse 启动而不指定 -module-path

这是 la piece de résistence ,我在 Java 11 和模块“有趣”了大约 5 小时后错误地发现了它。您的应用程序可以开箱即用,无需触及 -module-path 。 javafx 库当然仍然需要在您的类路径中(但这由 mvn 处理)。 诀窍 是(参见 this )你的主应用程序不应该扩展 Application (例如 MyApplication 下面)。如果是这种情况,则使用 main() 函数创建一个新类,例如:

 Application.launch(MyApplication.class);

笔记

在我的例子中(即在 Windows 上,系统中有一个默认的 JDK 8),有一个关于启动 javafx 的已知问题。解决方案是添加以下 VM arg: -Djava.library.path=C: 。所以实际上对于上面描述的所有 4 种方法我都需要添加它。

原文由 Cristian 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题