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

问题描述 投票:14回答:4

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

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

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

java java-11 javafx-11
4个回答
18
投票

getting started guide之后,这些是从Eclipse运行JavaFX 11所需的步骤。

1从here安装Eclipse 2018-09。

2从here安装JDK 11。

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

4从here下载JavaFX 11 ea。

5创建用户库:Eclipse - >窗口 - >首选项 - > Java - >构建路径 - >用户库 - >新建。将其命名为JavaFX11,并在JavaFX 11-ea的lib文件夹下包含jar。

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类,因为我们已经包含了用户库。

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

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

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


2
投票

我想分享一下有关推出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 ....然后在Goals文本框中输入exec:java。优于以前的方法:更多地集成到Eclipse中。并且易于调试。您只需要在调试模式下重新启动启动配置就可以了。我可以提醒一下,Eclipse启动配置可以直接存储在项目目录(repo)中的.launch文件中,因此可以由同事共享/重用。使用“编辑配置”窗口中的最后一个选项卡“公用”。

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

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

然后在Arguments> VM参数中添加:

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

所以这里的诀窍是使用${project_classpath}变量。因为否则你应该需要准确写出javafx jar的路径,这就是你的.m2 repo中的某个地方。这样做会使同事不能轻易地重用启动配置。

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

这是la piecedeRé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种方法,我需要添加它。


0
投票

@JoséPereda是完全正确的,一切正常。我已经使用Eclipse 2018-12发布了它。因此,在下载IDE(https://www.eclipse.org/downloads/packages/release/2018-12/r/eclipse-ide-java-developers)并安装e(fx)clipse插件后,您应该能够在工作区中创建“JavaFx Project”项。

下一步是从“Classpath”模块(Properties - > Java Build Path - > Libraries)中删除“JavaFX SDK”并添加Maven依赖项以删除编译错误:

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

JavaFX SDK for deletion

最后一步是将Java参数添加到JavaFX类的“运行配置”以启动应用程序(运行配置 - >参数选项卡 - > VM参数):

--module-path C:\path to the OpenJFX\javafx-sdk-11.0.1\lib --add-modules=javafx.controls

它应该在你运行它之后工作。当然,您应该在此之前下载JavaFX SDK(https://gluonhq.com/products/javafx/),将其解压缩并使用上述VM参数中的“lib”文件夹路径。


0
投票

我有关于FXMLLoader的问题...它无法找到班级。

我通过更改上面显示的参数来解决这个问题,加载所有模块,而不仅仅是javafx.controls

--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH
© www.soinside.com 2019 - 2024. All rights reserved.