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

2022-09-01 06:26:55

我收到以下错误,因为Java 11排除了JavaFX作为最新版本的一部分。

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

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


答案 1

按照入门指南,这些是从 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 -> 窗口 -> 首选项 -> Java -> 构建路径 -> 用户库 -> 新建。将其命名为 JavaFX11,并将 jar 包含在 JavaFX 11-ea 的 lib 文件夹下。

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

  7. 添加一个包和主应用程序类:javafx11HelloFX

    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<user>\Downloads\javafx-sdk-11\lib --add-modules=javafx.controls

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


答案 2

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

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

<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>

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

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

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

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

右键单击主类> Java 应用程序>运行方式”。首次单击新的启动配置时,将创建一个启动配置;它可能不起作用,所以你需要编辑它(例如,工具栏中的**运行按钮(w/ Play图标)>运行配置>选择与你的类相对应的一个。或者在单击“播放”后在其上)。CTRL + click

然后在参数> VM 参数中添加以下内容

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

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

2b) 使用 Eclipse 启动,无需指定-module-path

这是我在Java 11和模块“有趣”大约5小时后错误地发现的。您的应用程序可以开箱即用,无需触摸 。javafx 库当然仍然需要在你的类路径中(但这是由 mvn 处理的)。诀窍是(参见)您的主应用程序不应扩展(例如 下面)。如果是这种情况,那么创建一个具有函数的新类,例如:-module-pathApplicationMyApplicationmain()

Application.launch(MyApplication.class);

注意

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


推荐