由于Java 11将JavaFX排除在最新版本之外,我遇到了以下错误。
Error: JavaFX runtime components are missing, and are required to run
this application
那么我该如何在Java 11中向Eclipse添加JavaFX呢? 谢谢。
由于Java 11将JavaFX排除在最新版本之外,我遇到了以下错误。
Error: JavaFX runtime components are missing, and are required to run
this application
那么我该如何在Java 11中向Eclipse添加JavaFX呢? 谢谢。
按照入门指南,以下是在Eclipse中运行JavaFX 11所需的步骤。
从这里安装Eclipse 2018-09。
从这里安装JDK 11。
将Java 11作为已安装的JRE添加到Eclipse中:Eclipse -> Window -> Preferences -> Java -> Installed JREs -> Add。
从这里下载JavaFX 11 ea。
创建用户库:Eclipse -> Window -> Preferences -> Java -> Build Path -> User Libraries -> New。将其命名为JavaFX11,并包括JavaFX 11-ea下的lib文件夹中的jar文件。
创建一个Java项目。您不需要添加模块路径类。确保您选择了Java 11并将JavaFX11库添加到项目的模块路径中。
添加一个名称为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类,因为我们已经包含了用户库。
添加运行时参数。编辑项目的运行配置,并添加以下VM参数:
--module-path C:\Users\\Downloads\javafx-sdk-11\lib --add-modules=javafx.controls
最后,运行该项目。它应该可以正常工作。
javafx.base.jar
, ... - José Pereda-module-path
参数。请注意我正在使用maven,所以根据以前的答案,第一步是向pom.xml
添加与JavaFX相关的依赖项。例如:<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
在你的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将负责将classpath中的所有条目添加到module path中。我提醒一下Eclipse中的CTRL + ALT + T
快捷键,它可以直接在IDE中打开终端窗口。
右键单击项目 > 运行为 > Maven Build...,然后在Goals文本框中输入exec:java
。优点:比前一种方法更加集成到Eclipse中,并且易于调试。您只需要以调试模式重新启动启动配置即可。我想提醒一下,Eclipse启动配置可以直接存储为.launch
文件,存储在项目目录(repo)中,因此可以与同事共享/重复使用。使用Edit Configuration窗口中的最后一个选项卡Common。
-module-path
启动右键单击主类 > 运行为 > Java Application。第一次单击时会创建一个新的启动配置文件;可能它不起作用,所以您需要编辑它(例如,在工具栏中点击带有播放图标的**Run按钮 > Run configurations > 选择与您的类对应的启动配置文件。或者在单击Play后CTRL + 单击它)。
然后在Arguments > VM arguments中添加以下内容:
--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml
这里的技巧是使用${project_classpath}
变量。否则,您需要精确地编写路径以指向javafx jar,这些jar在您的.m2
存储库中。这样做会使启动配置不易于同事重复使用。
-module-path
这是我在经历了大约5小时的Java 11和模块“乐趣”后偶然发现的“la piece de résistence”。您的应用程序可以开箱即用,无需触及-module-path
。当然,javafx库仍然需要在您的类路径中(但这由mvn处理)。这个技巧是(参见这里),您的主应用程序不应该扩展Application
(例如下面的MyApplication
)。如果您的情况是这样的,请创建一个新的带有main()
函数的类,例如:
Application.launch(MyApplication.class);
在我的情况下(即在Windows系统上,具有默认的JDK 8),启动JavaFX存在已知问题。解决方法是添加以下VM参数:-Djava.library.path=C:
。因此,实际上对于上述提到的所有4种方法,我都需要添加这个参数。
不支持的JavaFX配置:类是从“未命名模块@eef29c6”加载的
- Tillmann我遇到了关于FXMLLoader
的问题...它无法找到该类。
我通过更改上述参数以加载所有模块而不仅仅是javafx.controls
来解决了这个问题:
--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH
正如 @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);
// }
}
--module-path C:\Programs\Java\javafx-sdk-13.0.1\lib --add-modules=ALL-MODULE-PATH
这就是了,您现在应该可以运行Java FX项目并看到一个默认窗口。
如果在Mac OS上运行,并且遇到无法显示窗口的问题,请在启动SWT时取消选择 -XstartOnFirstThread选项。
@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”模块(属性-> Java Build Path->库)中删除“JavaFX SDK”,并添加Maven依赖项以消除编译错误:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.1</version>
</dependency>
最后一步是在JavaFX类的“运行配置”中添加一个VM参数以启动应用程序(运行配置->参数选项卡->VM参数):--module-path C:\path to the OpenJFX\javafx-sdk-11.0.1\lib --add-modules=javafx.controls