我在Java 8 + JavaFX上有一个要迁移到Java 11的应用程序。其基本目的是为网络上的用户提供.jar,以便他们可以使用此小应用程序。我将JavaFX用于接口,并使用sqlite-jdbc生成数据库。
我有我的module-info.java,编译似乎正常:没有错误。但是,如果我运行该应用程序,则会出现以下错误:
Graphics Device initialization failed for : d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
at java.base/java.lang.Thread.run(Thread.java:834)
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native …Run Code Online (Sandbox Code Playgroud)
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Hello");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
在控制台上获取以下第一行:
35026:1978749] CoreText 注意:客户端请求名称“.SFNS-Regular”,它将获得 Times-Roman 而不是预期的字体。所有系统 UI 字体访问都应通过适当的 API,例如 CTFontCreateUIFontForLanguage() 或 +[NSFont systemFontOfSize:]。2021-06-09 00:00:46.808 java[35026:1978749] CoreText 注意:在 CTFontLogSystemFontNameRequest 上设置断点进行调试。2021-06-09 00:00:46.815 java[35026:1978749] CoreText 注意:客户端请求名称“.SFNS-Regular”,它将获得 Times-Roman 而不是预期字体。所有系统 UI …
我在JavaFX上遇到了一些麻烦.我想开始创建应用程序,桌面或移动,至少是一些东西.所以我发现我可以使用JavaFX库.但据我的理解,它被排除在JDK 9.实际上,我在Ubuntu 18(尽管Eclipse中写道:我有JavaSE的10环境,这正是我也有点糊涂了)使用的OpenJDK 11,我安装的OpenJFX使用sudo apt install openjfx,我无法使Eclipse与JavaFX一起使用.
我不确定是否有任何意义不使用包含JavaFX的JDK 8,但无论如何,如何在Eclipse中使用JavaFX?
我的模块化 JavaFX 应用程序有问题。我创建了一个 JavaFX 项目并添加了 JavaFX 库和 JavaFX 模块得到认可。但是,我不断收到这些错误消息:
Run Code Online (Sandbox Code Playgroud)Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found
完整设置的图像在此附上:
编辑:
这是所有错误消息:
/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.library.path=
/home/thenekolite/Documents/JavaTools/javafx-sdk-11.0.1/lib --module-
-path=~/Documents/JavaTools/javafx-sdk-11.0.1/lib
--add-modules=javafx.controls,javafx.fxml
--add-modules javafx.base,javafx.graphics --add-reads
-javaagent:/home/thenekolite/idea-IU-183.4588.61/
lib/idea_rt.jar=35937:/home/thenekolite/idea-IU-183.4588.61/bin
-Dfile.encoding=UTF-8 -classpath /home/thenekolite/IdeaProjects/
Latihan1/out/production/Latihan1:/home thenekolite/Documents/JavaTools/
javafx-sdk-11.0.1/lib/src.zip:/home/thenekolite/Documents/JavaTools/
javafx-sdk-11.0.1/lib/javafx-swt.jar:/homehome/thenekolite/Documents
/JavaTools/javafx-sdk-11.0.1/lib/javafx.fxml.jar:/home/thenekolite/
Documents/JavaTools/javafx-sdk-11.0.1/libjavafx.media.jar:
/home/thenekolite/Documents/JavaTools/javafx-sdk-11.0.1/lib/
/javafx.swing.jar:/home/thenekolite/Documents/JavaTools/javafx
sdk-11.0.1/lib/javafx.controls.jar:/home/thenekolite/
Documents/JavaTools/javafx-sdk-11.0.1/lib/javafx.graphics.jar
-p /home/thenekolite/Documents/JavaTools/javafx-sdk-11.0.1/lib/
/javafx.base.jar:/home/thenekolite/Documents/
JavaTools/javafx-sdk-11.0.1/lib/javafx.graphics.jar sample.Main
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found
Run Code Online (Sandbox Code Playgroud)
我还添加了 vm 选项:
但是,我仍然收到此错误消息。
我是 java fx 的新手,我已经下载了在 java 11 上运行的 Apache Netbeans 9。
由于 java fx 是单独发货的,我已经下载了 openjfx-11.0.1_SDK 并按照此链接中的步骤https://openjfx.io/openjfx-docs/#install-javafx
当我尝试在 apache netbeans 中创建 java fx 应用程序时,出现以下错误
无法自动设置 JavaFX 平台。请转到平台管理器,创建一个非默认 Java SE 平台,然后转到 JavaFX 选项卡,启用 JavaFX 并填写有效 JavaFX SDK 和 JavaFX 运行时的路径。注:JavaFX SDK 可从 JavaFX 网站下载
附上netbeans 10的屏幕截图。
我正在尝试使用 JavaFX 11 和 Eclipse 运行一个简单的程序,但出现此错误:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module format not recognized: D:\javafx-sdk-11.0.2\lib\src.zip
Run Code Online (Sandbox Code Playgroud)
我遵循了这些说明。这是 JDK 和 JavaFX 所在的位置:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module format not recognized: D:\javafx-sdk-11.0.2\lib\src.zip
Run Code Online (Sandbox Code Playgroud)
VM 参数是:
D:\javafx-sdk-11.0.2\
C:\Program Files\Java\jdk-11.0.2
Run Code Online (Sandbox Code Playgroud)
请帮助识别并纠正问题。(我按照下面的建议尝试了几件事,但似乎没有任何效果。)
我制作了一个使用 Maven、JavaFX 和其他一些依赖项的 Java 应用程序。以前,构建一个可执行的 jar 很容易,但由于 Java11 是模块化的并且不包含 JavaFX,我无法构建一个可用的 jar。
我已经尝试了很多东西,但我不知道我现在应该做什么。
我的 pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<verbose>true</verbose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<outputDirectory>out/</outputDirectory>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>fr.crosf32.fxtest.Entry</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
我尝试构建包含所有依赖项的工件,但在运行时出现错误 (java -jar ):
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: javafx/application/Application
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at fr.crosf32.fxtest.SlimForest.lambda$new$0(SlimForest.java:26)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) …Run Code Online (Sandbox Code Playgroud) 在我的 JavaFX 项目中,我使用大量形状(例如 1 000 000)来表示地理数据(例如地块轮廓、街道等)。它们存储在一个组中,有时我必须清除它们(例如,当我加载包含新地理数据的新文件时)。问题是:清除/删除它们需要很多时间。所以我的想法是在单独的线程中删除形状,这显然由于 JavaFX 单线程而不起作用。
这是我想要做的事情的简化代码:
HelloApplication.java
package com.example.javafxmultithreading;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import java.io.IOException;
public class HelloApplication extends Application {
public static Group group = new Group();
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
Scene scene = new Scene(fxmlLoader.load());
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();
for (int i = 0; i < 1000000; i++) {
group.getChildren().add(new Line(100, 200, 200, 300));
}
HelloController.helloController = fxmlLoader.getController();
HelloController.helloController.pane.getChildren().addAll(group); …Run Code Online (Sandbox Code Playgroud) 创建简单的 javafx 11“hello world”应用程序。\n创建自定义 JRE 时出现错误。
\nuser@user:~/Desktop/javafx/hellofx$ ./run.sh \nError: Hash of java.xml (c043b4c28b897656e2a4d36c92ba2f5d52134bce79643236dd36295e14178be7) differs to expected hash (4e7db7fc941d9f316c4aafe02717b5809ee722be8433d283050365e7fd49331f) recorded in java.base\nRun Code Online (Sandbox Code Playgroud)\n错误代码:
\n$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS:mods --add-modules hellofx --output hellofx #error\nRun Code Online (Sandbox Code Playgroud)\n操作系统:ubuntu 19.10
\n$java --version\nopenjdk 11.0.6 2020-01-14\nOpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu119.10.1)\nOpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu119.10.1, mixed mode, sharing)\nRun Code Online (Sandbox Code Playgroud)\n$javac --version\njavac 11.0.6\nRun Code Online (Sandbox Code Playgroud)\nuser@user:~/Desktop/javafx/hellofx$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 mods\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hellofx\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 hellofx\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 HelloFX.class\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module-info.class\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 run.sh\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 hellofx\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 HelloFX.java\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module-info.java\n\n5 directories, …Run Code Online (Sandbox Code Playgroud) 我似乎无法从 javaFX 应用程序生成跨平台构建。
\n当我从 IntelliJ 运行它时,它工作正常,如果通过 maven 打包它,我还可以在 Linux 上运行生成的 jar。
\n当我尝试在 Mac 上运行 jar 时出现问题,似乎不包含 JavaFX 库,然后我得到以下堆栈跟踪:
\nGraphics Device initialization failed for : es2, sw\nError initializing QuantumRenderer: no suitable pipeline found\njava.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found\n at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)\n at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)\n at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:261)\n at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)\n at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)\n at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)\n at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)\n at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)\n at java.base/java.lang.Thread.run(Thread.java:832)\nCaused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found\n at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)\n at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)\n ... 1 more\nException in thread \xe2\x80\x9cmain\xe2\x80\x9d …Run Code Online (Sandbox Code Playgroud) javafx-11 ×10
java ×8
javafx ×6
java-11 ×4
eclipse ×2
maven ×2
concurrency ×1
jlink ×1
netbeans-10 ×1
netbeans-9 ×1
openjfx ×1