35

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

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

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

4

6 回答 6

58

按照入门指南,这些是从 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,并在 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 类,因为我们已经包含了用户库。

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

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

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

于 2018-09-03T22:15:08.927 回答
13

我想分享我关于启动 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 将负责将所有条目从类路径添加到模块路径。我提醒CTRL + ALT + TEclipse 中的快捷方式,即直接在 IDE 中打开终端窗口。

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

右键单击项目 > 运行方式 > Maven 构建...。然后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 种方法,我需要添加它。

于 2019-03-22T13:17:51.467 回答
9

我遇到了关于FXMLLoader......它无法找到课程的问题。

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

--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH
于 2019-04-15T14:39:24.157 回答
5

正如@Cristian 所提到的,创建一个单独的 Main 类似乎可以解决问题,没有任何其他参数。

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

public class MainWindow extends Application {
    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    // do not use this method
    //  public static void main(String[] args) {
    //      Application.launch(MainWindow.class);
    //  }
}
于 2020-02-03T01:36:22.677 回答
1

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

下一步是从“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

最后一步是将 VM 参数添加到 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”文件夹的路径。

于 2018-12-23T21:35:28.823 回答
1

使用 Carlao2005 的建议,我能够整理出一份完整的指南,让 JavaFX 在 Eclipse 中工作,因为 JavaFX 没有随 Java SDK 一起提供。这假设您安装了带有 E(FX)clipse 插件的 Eclipse 并安装了 JavaFX SDK。请注意,JavaFX SDK 安装在路径中没有空格的位置很重要,因此 C:/Program Files 不是一个好的选择。

为每个要构建的新 Java FX 项目执行此步骤。首先,转到file > new > other并找到创建新Java FX Project的选项。创建项目后,您会注意到它不会编译,因为 Eclipse 需要了解 JavaFX 库。访问项目属性,然后找到Java 构建路径。选择Libraries 选项卡,然后 选择module path。然后选择添加库按钮,然后选择用户库选项,然后按 下一步

在出现的窗口中,选择 new并将库命名为JavaFX13。选择添加外部 jars,然后找到JavaFX 13安装目录的lib文件夹并选择所有 .jar 文件夹,然后在所有窗口上应用并关闭或完成。

如果您尝试运行该项目,您会发现它将无法找到application.main。为了解决这个问题,我们还有最后一步。在 Eclipse 的包资源管理器中右键单击 main.java。选择运行方式 > 运行配置,然后选择参数选项卡。在 vm 参数中添加以下内容(模块路径指向您安装的 Java FX sdk):

--module-path C:\Programs\Java\javafx-sdk-13.0.1\lib --add-modules=ALL-MODULE-PATH

就是这样,您现在应该能够运行 Java FX 项目并看到一个默认窗口。如果在 Mac OS 上运行,如果在显示窗口时遇到问题,则在启动 SWT 时取消选择选项 -XstartOnFirstThread 参数。

于 2020-01-08T18:43:19.317 回答