【问题标题】:JavaFX error in WSL 2 : java.lang.UnsupportedOperationException: Unable to open DISPLAYWSL 2 中的 JavaFX 错误:java.lang.UnsupportedOperationException:无法打开显示
【发布时间】:2021-09-14 03:07:54
【问题描述】:

我刚从 Ubuntu 20.04 发行版切换回带有集成 WSL 2 的 Windows,但在运行我的 JavaFX 项目时遇到了问题。

我在main 方法内的launch(args) 周围收到以下错误堆栈跟踪:

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

launch.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"
        }
    ]
}

settings.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

有人知道这里可能发生了什么吗?

【问题讨论】:

  • 您是否正在运行支持 GUI (WSLg) 的 Windows Insider 构建?如果没有,除非您安装了第三方 X 服务器或正在使用xrdp,否则这将是预期行为。请参阅this question,这是多个可能的答案。如果您正在运行支持 WSL GUI 的系统,请编辑您的问题以包含您正在使用的机制。谢谢!
  • 根据您在下面的自我回答,这绝对是我上面链接的问题/答案的副本。我建议您接受您应该在标题中看到的“重复”建议。
  • @NotTheDr01ds 不正确,虽然我感谢您建议重复,但我遵循了所有 cmets 中的每条指令,但它们都不足以解决问题。您显然没有阅读那里提供的所有答案并与我提供的链接进行比较,否则,您不会对我的答案投反对票。我只是想在未来对某人有所帮助。

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


【解决方案1】:

找到答案

我的 WSL 2 开箱即用无法运行图形应用程序。

例如运行

$ xclock

由于未设置 DISPLAY 变量且未安装 X11,因此在 shell 中返回错误,也不允许跨防火墙。

一步一步this guide解决了我的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多