当前位置: 首页 > 知识库问答 >
问题:

构建和运行JavaFX.jar文件时遇到的问题

韦翰音
2023-03-14

我很难让JavaFX应用程序在IDE之外运行。我正在使用IntelliJ IDEA 2019.3,并使用OpenJDK-12进行编译。JavaFX sdk版本为11.0.2,我使用外部库JFoenix-9.0.8和JSerialComm-2.6.0。操作系统是Windows10,安装了JDK14,我可以运行使用命令行java-jar name.jar以相同方式构建的非JavaFX应用程序。当我尝试从命令行运行mu JavaFX.jar时,我得到以下错误消息:

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 com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        ... 1 more
Exception in thread "main" java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:832)

jar中包含了所有必需的库,据我所知,我尝试了多个线程,尝试了多个方法,但最终总是卡住了,因为我对构建Java.jar-s还是一个新手。

dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX%;%PATH_TO_FOENIX% --add-modules=javafx.controls --add-modules=javafx.fxml --add-modules=jfoenix-9.0.8.jar --add-modules=jSerialComm-2.6.0.jar --add-modules=javafx.graphics -d out @sources.txt & del sources.txt

在Win cmd中使用此命令时会出现错误:

error: bad name in value for --add-modules option: 'jfoenix-9.0.8.jar'
error: bad name in value for --add-modules option: 'jSerialComm-2.6.0.jar'

通过下面的教程将PATH_TO_FX设置为正确的位置,并将PATH_TO_FOENIX设置为使用exteranl libraries.jar-s的位置。在lib名称末尾没有“.jar”的情况下也尝试了此命令。

当我在与模块对应的文件夹中创建module-info.java时,我实际上可以使用以下命令编译它:

dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX%;%PATH_TO_FOENIX% -d mods/LA_GUI @sources.txt 
Error: Module javafx.fxml not found, required by LA.GUI

当我尝试使用jlink构建映像时。openjfx中的示例providet非常简单,所以我可能在这里略去了一些内容。就这样。我尝试在Intellij中添加对Maven的框架支持,但是Maven在找到不同的包时遇到了问题,在每次解决了运行Maven测试时的错误后,又出现了另一个错误,所以我放弃了这一点,因为我以前从未使用过它,甚至不知道是否可以使它工作,使用Maven的.jar生成器是否与我现在使用的有任何不同。

附带说明:我从笔记本电脑中删除了最新的JRE,因为当我尝试通过java-jar name.jar运行hello world程序时,它说该文件是使用比当前java所能运行的更新的版本编译的,这在我下载最新的JRE时是没有意义的。现在,我已经有了所有与JDK14相关的java变量和运行程序,它可以很好地运行基本的java程序,但我似乎无法让它运行我的JavaFX.jar而不出现前面提到的错误。我本可以换用其他适合于构建GUI应用程序的编程语言,或者使用Java Swing之类的,但是我只有不到一个月的时间来完成这个项目,而且我无法负担用以前没有用过的东西来重新开始…

编辑:这是我的.jar文件内容的截图,我尝试运行:.jar文件内容

共有1个答案

燕超
2023-03-14

通过遵循OpenJFX中的示例,我体验到了错误消息。我发现如果我将顺序从(--module-path--add-modules)交换到(--add-modules--module-path),我就能够使它工作。另外,我必须提供模块路径的完整地址,而不是使用环境变量。希望这能给你一些建议。

 类似资料:
  • 我在执行构建的jar文件时遇到了麻烦: 运行以下命令会给我带来一系列错误。 但是当我运行时,它工作得很好... 我在这里遵循了以下说明:http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html 我的建筑。Gradle看起来是这样的: 谢谢你。

  • 问题内容: 该程序的目的是从文本文件中删除某些运动队及其成员,然后用新的一组值覆盖原始文件。通过将值读入一个数组,然后遍历该数组并删除组名和接下来的两行来尝试此操作,但是由于某种原因,它停止在索引之后遍历该数组。 我被困住了,所以任何帮助都会很棒 码: SportTeamList.txt = 问题答案: 你应该 从来不 从时迭代。你在做什么 考虑一个简单的例子,我有一个list 。让我们假设它的索

  • 我想通过liquibase-maven-plugin运行一个liquibase更新,但是changeset yml文件在一个。jar中,我通过依赖项拉入这个文件。 当我用TotalCommander打开。jar时,它具有以下结构:xy.jar/changelog/changeset.yml。

  • 我知道这是非常基本的东西,但出于某种原因,我在使用bufferedReader/Writer时遇到了问题。我试图获取第一行文本并将其返回到另一个方法。然而,由于某些原因,写入程序似乎没有写入临时文件,也没有更改临时文件的名称。 通过抛出一些印刷声明,我已经能够弄清楚: > 私有静态字符串wavFinder()引发IOException{ 以下是我正在使用的方法。如果你注意到什么,请告诉我,如果你有

  • 当我通过maven测试执行我的测试脚本时,它显示错误。下面是运行时的错误。