我收到以下错误,因为Java 11将JavaFX排除在最新版本的一部分之外。
Error: JavaFX runtime components are missing, and are required to run this application
那么如何在Java 11中将JavaFX添加到Eclipse?谢谢。
在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最后,运行该项目。它应该工作正常。
我想分享一下有关推出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>
为了发布,我发现了几个选项:
在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中打开一个终端窗口。
右键单击项目> Run As> Maven Build ....然后在Goals文本框中输入exec:java
。优于以前的方法:更多地集成到Eclipse中。并且易于调试。您只需要在调试模式下重新启动启动配置就可以了。我可以提醒一下,Eclipse启动配置可以直接存储在项目目录(repo)中的.launch
文件中,因此可以由同事共享/重用。使用“编辑配置”窗口中的最后一个选项卡“公用”。
-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中的某个地方。这样做会使同事不能轻易地重用启动配置。
-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种方法,我需要添加它。
@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>
最后一步是将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”文件夹路径。
我有关于FXMLLoader
的问题...它无法找到班级。
我通过更改上面显示的参数来解决这个问题,加载所有模块,而不仅仅是javafx.controls
:
--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH