You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2运行JavaFX报错Unable to open DISPLAY问题求助

问题根因
  • 最核心的错误是.bashrc中DISPLAY变量配置冲突:你通过resolv.conf获取到Windows宿主机IP后已经设置了正确的DISPLAY值,后续又新增了DISPLAY=:0.0的配置强行覆盖了之前的正确值,导致JavaFX尝试连接WSL2本地的X服务器,而WSL2本身默认没有运行X服务,因此抛出无法打开DISPLAY的异常。
  • VcXsrv配置不符合要求,未开启访问权限或被Windows防火墙拦截。
  • VS Code运行Java程序时未正确加载.bashrc中的环境变量,使用了错误的DISPLAY值。
  • WSL2系统缺失JavaFX运行GUI所需的X11、GTK依赖库。
修复步骤
  1. 修正.bashrc配置
    删除.bashrc末尾多余的两行配置:
DISPLAY=:0.0
export DISPLAY

仅保留以下两行即可:

export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0
export LIBGL_ALWAYS_INDIRECT=1

执行source ~/.bashrc使配置生效,运行echo $DISPLAY验证,输出应为[Windows宿主机IP]:0.0格式,而非单纯的:0.0。

  1. 调整VcXsrv启动配置
  • 启动VcXsrv时,「Display settings」页选择Multiple windows,Display number填0
  • 「Client startup」页选择Start no client
  • 「Extra settings」页必须勾选Disable access control,否则WSL2的访问请求会被拒绝
  • 启动时若弹出Windows防火墙提示,需允许VcXsrv在专有网络、公用网络下通信,若之前未勾选,可进入Windows Defender防火墙高级设置,找到VcXsrv的入站规则,放开所有权限。
  1. 安装WSL2依赖库
    执行以下命令安装JavaFX运行所需的系统依赖:
sudo apt update && sudo apt install -y libxext-dev libxrender-dev libxtst-dev libgtk-3-0 x11-apps

安装完成后运行xeyes测试X11连通性,若能弹出带眼睛的小窗口,说明X服务链路正常。

  1. 修正VS Code launch.json配置
    在Launch App的配置项中新增环境变量字段,确保Java运行时读取到正确的DISPLAY值:
{
    "type": "java",
    "name": "Launch App",
    "request": "launch",
    "vmArgs": "--module-path /home/azazel/javafx-sdk-17.0.1/lib --add-modules javafx.controls,javafx.fxml",
    "mainClass": "App",
    "projectName": "javafx_ef467b58",
    "env": {
        "DISPLAY": "${env:DISPLAY}"
    }
}

若仍异常,可直接将DISPLAY的值写死为第一步验证得到的[Windows宿主机IP]:0.0。


额外可选方案:若你使用的是较新版本的WSL2,已自带WSLg图形支持,无需安装VcXsrv,只需删除.bashrc中所有自定义的DISPLAY相关配置,系统会自动设置正确的DISPLAY变量,直接运行JavaFX程序即可。

内容的提问来源于stack exchange,提问作者Kai Strachan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:15:03