标签: javafx-11

迁移到提供RuntimeException的JDK 11 + JavaFX 11

我在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)

java javafx javafx-11

11
推荐指数
1
解决办法
5271
查看次数

JavaFX 字体未正确呈现


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 …

java javafx java-11 javafx-11

11
推荐指数
1
解决办法
4636
查看次数

如何在Eclipse中使用JavaFX 11?

我在JavaFX上遇到了一些麻烦.我想开始创建应用程序,桌面或移动,至少是一些东西.所以我发现我可以使用JavaFX库.但据我的理解,它被排除在JDK 9.实际上,我在Ubuntu 18(尽管Eclipse中写道:我有JavaSE的10环境,这正是我也有点糊涂了)使用的OpenJDK 11,我安装的OpenJFX使用sudo apt install openjfx,我无法使Eclipse与JavaFX一起使用.

我不确定是否有任何意义不使用包含JavaFX的JDK 8,但无论如何,如何在Eclipse中使用JavaFX?

java eclipse javafx javafx-11

10
推荐指数
2
解决办法
2万
查看次数

JavaFX 模块化应用程序,java.lang.module.FindException:未找到模块 javafx.controls(Java 11,Intellij)

我的模块化 JavaFX 应用程序有问题。我创建了一个 JavaFX 项目并添加了 JavaFX 库和 JavaFX 模块得到认可。但是,我不断收到这些错误消息:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found
Run Code Online (Sandbox Code Playgroud)

完整设置的图像在此附上:

在此处输入图片说明

编辑:

这是所有错误消息:

/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 intellij-idea openjfx java-11 javafx-11

9
推荐指数
1
解决办法
2万
查看次数

在 Apache Netbeans 10 中创建 JavaFX11 应用程序时出错

我是 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的屏幕截图。

在此处输入图片说明

netbeans-9 javafx-11 netbeans-10

8
推荐指数
1
解决办法
2万
查看次数

无法使用 Eclipse 运行 JavaFX 11

我正在尝试使用 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)

请帮助识别并纠正问题。(我按照下面的建议尝试了几件事,但似乎没有任何效果。)

java eclipse javafx javafx-11

8
推荐指数
1
解决办法
7865
查看次数

从 maven 使用 JavaFX11 构建可执行 JAR

我制作了一个使用 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)

maven java-11 javafx-11

8
推荐指数
1
解决办法
8271
查看次数

清除具有大量形状/多线程的组的最快方法

在我的 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)

java concurrency multithreading javafx javafx-11

8
推荐指数
1
解决办法
327
查看次数

错误:java.xml (...) 的哈希值与 java.base 中记录的预期哈希值 (...) 不同

创建简单的 javafx 11“hello world”应用程序。\n创建自定义 JRE 时出现错误。

\n
user@user:~/Desktop/javafx/hellofx$ ./run.sh \nError: Hash of java.xml (c043b4c28b897656e2a4d36c92ba2f5d52134bce79643236dd36295e14178be7) differs to expected hash (4e7db7fc941d9f316c4aafe02717b5809ee722be8433d283050365e7fd49331f) recorded in java.base\n
Run Code Online (Sandbox Code Playgroud)\n

错误代码:

\n
$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS:mods --add-modules hellofx --output hellofx #error\n
Run 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)\n
Run Code Online (Sandbox Code Playgroud)\n
$javac --version\njavac 11.0.6\n
Run Code Online (Sandbox Code Playgroud)\n
user@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)

java javafx jlink java-11 javafx-11

7
推荐指数
1
解决办法
3703
查看次数

无法生成跨平台javaFX应用程序

我似乎无法从 javaFX 应用程序生成跨平台构建。

\n

当我从 IntelliJ 运行它时,它工作正常,如果通过 maven 打包它,我还可以在 Linux 上运行生成的 jar。

\n

当我尝试在 Mac 上运行 jar 时出现问题,似乎不包含 JavaFX 库,然后我得到以下堆栈跟踪:

\n
Graphics 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)

java maven javafx-11

7
推荐指数
1
解决办法
2165
查看次数