ubuntu - WSL 2 : java. lang.UnsupportedOperationException 中的 JavaFX 错误:无法打开显示

标签 ubuntu javafx windows-subsystem-for-linux openjfx

我刚刚从 Ubuntu 20.04 发行版切换回带有集成 WSL 2 的 Windows,并且在运行我的 JavaFX 项目时遇到了问题。
我在 launch(args) 周围收到以下错误堆栈跟踪里面 main方法 :

hexaquarks@LAPTOP-KPPA3O52:~/Particle_Geometry_Simulation$  cd /home/hexaquarks/Particle_Geometry_Simulation ; /usr/bin/env /usr/lib/jvm/java-11-openjdk-amd64/bin/java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml,javafx.swing -Dfile.encoding=UTF-8 @/tmp/cp_eiv0idm2cbh7kd2tl4ddw7ff7.argfile AppFrame 
Exception in thread "main" java.lang.reflect.InvocationTargetException
        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.UnsupportedOperationException: Unable to open DISPLAY
        at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$new$6(GtkApplication.java:173)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:171)
        at javafx.graphics/com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
        at javafx.graphics/com.sun.glass.ui.Application.run(Application.java:144)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:258)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:269)
        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)
        ... 5 more
系统配置
$ java -version
openjdk version "11.0.11" 2021-04-20                                                                                    OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)  
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)   

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal 
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS" 

$ java -version
openjdk version "11.0.11" 2021-04-20 
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04) 
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing) 
项目树
$ [.../Particle_Geometry_Simulator] tree
.
├── .vscode
|   ├── launch.json
|   └── settings.json
├── bin
└── src
    ├── AppFrame.java
    ├── ... // f files here
    └── ParticleFunJavaFx.fxml
启动.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Launch AppFrame",
            "request": "launch",
            "vmArgs": "--module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml,javafx.swing",
            "mainClass": "AppFrame",
            "projectName": "Particle_Geometry_Simulation_4f401646"
        },
        {
            "type": "java",
            "name": "Launch Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "Launch GameFrame",
            "request": "launch",
            "vmArgs": "--module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml,javafx.swing",
            "mainClass": "GameFrame",
            "projectName": "Particle_Geometry_Simulation_4f401646"
        }
    ]
}
设置.json
{
    "java.project.sourcePaths": ["src"],
    "java.project.outputPath": "bin",
    "java.project.referencedLibraries": [
        "lib/**/*.jar",
        "/usr/share/openjfx/lib/javafx-swt.jar",
        "/usr/share/openjfx/lib/javafx.media.jar",
        "/usr/share/openjfx/lib/javafx.web.jar",
        "/usr/share/openjfx/lib/javafx.graphics.jar",
        "/usr/share/openjfx/lib/javafx.fxml.jar",
        "/usr/share/openjfx/lib/javafx.controls.jar",
        "/usr/share/openjfx/lib/javafx.base.jar",
        "/usr/share/openjfx/lib/javafx.swing.jar"
    ]
}

我尝试过的事情
我查看了关于这个问题的几乎所有关于 SO 的帖子,但没有成功。
sudo apt install libgtk-3-0
不是修复,因为我已经安装了这个。
我也试过删除openjfx并从不同的镜像重新安装它,但没有成功。目前我拥有的软件包,我已经安装了它
sudo apt install openjfx
有谁知道这里可能发生了什么?

最佳答案

找到了答案
我的 WSL 2 开箱即用无法运行图形应用程序。
例如运行

$ xclock
在 shell 中返回了一个错误,因为 DISPLAY变量未设置,X11 未安装,也不允许跨防火墙。
循序渐进this guide解决了我的问题

关于ubuntu - WSL 2 : java. lang.UnsupportedOperationException 中的 JavaFX 错误:无法打开显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69171337/

相关文章:

ubuntu - Docker-compose 未在 Ubuntu 14.04 上正确安装—第 1 行 : {error:Not Found}

java - 将 Spring Boot Web 应用程序作为服务部署到 Ubuntu

mysql - Java FXML - NetBeans - 从表中删除 - MySQL

javafx - 如何在 javaFx(场景构建器)的 DatePicker 中禁用过去的日期

Npm 安装使 Windows 崩溃

ubuntu - 无法在命令行上打开 VS Code

node.js - 如何保持 Node 应用程序运行?

linux - 无法获取 munin 中 IO 服务时间的图表

java - 移动刻度标签JavaFx 2

docker - 使用 WSL 2 引擎运行 docker 桌面时使用的 docker-desktop-data 发行版是什么