use*_*615 22 java java-11 javafx-11
我收到以下错误,因为Java 11将JavaFX排除在最新版本的一部分之外.
Run Code Online (Sandbox Code Playgroud)Error: JavaFX runtime components are missing, and are required to run this application
那么如何在Java 11中将JavaFX添加到Eclipse?谢谢.
Jos*_*eda 29
在入门指南之后,这些是从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,并在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();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,编辑器不应该抱怨JavaFX类,因为我们已经包含了用户库.
8添加运行时参数.编辑项目的运行配置,并添加以下VM参数:
--module-path C:\Users\<user>\Downloads\javafx-sdk-11\lib --add-modules=javafx.controls
Run Code Online (Sandbox Code Playgroud)
9最后,运行该项目.它应该工作正常.
我想分享一下有关启动javafx 11应用程序的发现。我说的是一个现有的遗留javafx应用程序,该应用程序最初是在没有模块的情况下开发的(例如,带有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>
Run Code Online (Sandbox Code Playgroud)
为了启动,我发现了几种选择:
在您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>
Run Code Online (Sandbox Code Playgroud)
之后,您可以从控制台窗口运行mvn exec:java
,这将启动应用程序。Maven将负责将所有条目从类路径添加到模块路径。我想起了CTRL + ALT + T
Eclipse中的快捷方式,该快捷方式直接在IDE中打开一个终端窗口。
该项目点击右键>运行方式> Maven构建...。然后exec:java
在“ 目标”文本框中输入。与以前的方法相比的优势:与Eclipse的集成度更高。并且调试方便。您只需要在Debug模式下重新启动启动配置即可。我想提醒一下,Eclipse启动配置可以.launch
直接作为文件存储在项目目录(repo)中,因此可以由同事共享/重用。使用最后一个标签,常见,在编辑配置窗口。
-module-path
使用变量指定右键单击主类>运行方式> Java应用程序。首次单击时,将创建一个新的启动配置。可能无法使用,因此您需要对其进行编辑(例如,工具栏中的“运行”按钮(带有播放图标)>运行配置>选择与您的班级相对应的一个。或者CTRL + click
单击“ 播放”后在其上进行播放)。
然后在Arguments> VM arguments中添加它:
--module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} --add-modules javafx.controls,javafx.fxml
Run Code Online (Sandbox Code Playgroud)
因此,这里的窍门是使用${project_classpath}
变量。因为否则,您应该需要准确地写出指向Javafx jar的路径,该路径在您的存储.m2
库中。这样做会使启动配置不容易被同事重用。
-module-path
这是拉一块去抵抗,这是我发现的错误,有关Java 11模块“好玩”的5H之后。您的应用程序可以直接使用,而无需触摸-module-path
。当然,javafx库仍然需要在您的类路径中(但这由mvn处理)。该诀窍是(参见本),您的主要应用不应延伸Application
(例如MyApplication
下文)。如果是这种情况,请使用一个main()
函数执行新类,例如:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
就我而言(即在Windows上,系统中具有默认的JDK 8),存在有关启动javafx的已知问题。解决方案是添加以下VM arg :-Djava.library.path=C:
。因此,实际上对于上述所有4种方法,我都需要添加它。
我遇到了关于FXMLLoader
... 无法找到课程的问题。
我通过更改上面显示的参数解决了这个问题,以加载所有模块,而不仅仅是javafx.controls
:
--module-path <path to the javafx sdk> --add-modules=ALL-MODULE-PATH
Run Code Online (Sandbox Code Playgroud)
正如 @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);
// }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36877 次 |
最近记录: |