无法加载 Glass 工厂类:在 Linux 和某些 Mac 操作系统机器上继续出现此错误,但在其他情况下工作正常

问题描述 投票:0回答:1

我在 Intellij 上制作了一个 Jar 文件,我能够使其在 Windows 和某些 MacOS 中运行,但在其他情况下则不然(因此某些 MacOS 和 Linux 无法运行)

我做了什么:

  1. javafx
    版本从 17 更改为 11。
  2. 添加了
    module-info.java
    并添加了java控件和fxml 上下文这是我的
    build.gradle
    文件
plugins {
    id 'checkstyle'
    id 'java'
    id 'application'
    id 'com.github.johnrengelman.shadow' version '7.1.2'
    id 'org.openjfx.javafxplugin' version '0.0.13'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.0'
    testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.0'

    String javaFxVersion = '17.0.8'

    implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-base', version: javaFxVersion, classifier: 'linux'
    implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-controls', version: javaFxVersion, classifier: 'linux'
    implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-fxml', version: javaFxVersion, classifier: 'linux'
    implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'win'
    implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'mac'
    implementation group: 'org.openjfx', name: 'javafx-graphics', version: javaFxVersion, classifier: 'linux'

}

test {
    useJUnitPlatform()

    testLogging {
        events "passed", "skipped", "failed"

        showExceptions true
        exceptionFormat "full"
        showCauses true
        showStackTraces true
        showStandardStreams = false
    }
}

javafx {
    version = '17'
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

application {
    mainClass.set("seedu.Launcher")
}

shadowJar {
    archiveBaseName = "duke"
    archiveClassifier = null
    dependsOn("distZip", "distTar")
}

checkstyle {
    toolVersion = '10.2'
}

run {
    standardInput = System.in
}

我使用的Java版本是11

Sep 16, 2023 12:08:25 AM com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @6712f432'
java.lang.ClassNotFoundException: com.sun.glass.ui.gtk.GtkPlatformFactory
        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:527)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:315)
        at com.sun.glass.ui.PlatformFactory.getPlatformFactory(PlatformFactory.java:42)
        at com.sun.glass.ui.Application.run(Application.java:146)
        at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:291)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:293)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
        at java.base/java.lang.Thread.run(Thread.java:829)
Failed to load Glass factory class
Exception in thread "main" java.lang.NullPointerException
        at com.sun.glass.ui.Application.run(Application.java:146)
        at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:291)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:293)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:679)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
        at java.base/java.lang.Thread.run(Thread.java:829)
java fxml openjfx
1个回答
0
投票

解决了问题,谢谢

这是我的问题的解决方案,以防有人遇到相同的跨平台问题

我在 Linux (Arch) 中也遇到了同样的错误。要解决此问题:删除 build.gradle 末尾的 javafx {} 块。这部分实际上是限制软件包。

© www.soinside.com 2019 - 2024. All rights reserved.