在适用于 Linux 的 Windows 子系统上运行 JavaFX 15 应用程序时出现内部错误

2023-12-23

当我尝试在适用于 Linux WSL2 / Ubuntu 20.04 的 Windows 子系统上运行 JavaFX 15 应用程序时,我遇到了困难,需要有关后续尝试步骤的建议。

到目前为止,我已经能够在 WSL 内运行我通常在 Windows/JDK15 上执行的所有 Java 构建,包括那些具有 Swing/AWT 依赖项的构建。 AWT / Swing 测试应用程序在 WSL 中成功运行并引用 JDK15,并在 Windows 10 上运行 X Windows。但是我无法运行任何 JavaFX 应用程序,即使是HelloFX https://github.com/openjfx/samples/blob/master/HelloFX/CLI/hellofx/HelloFX.java sample:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {
        launch();
    }
}

我在 Windows 上尝试过各种 X 服务器 - X/Cygwin、X410、VcXsrv 和 XMing。以下是使用 VcXsrv 运行 HelloFX 时的错误消息:

> echo $PATH_TO_FX
/mnt/c/linux/javafx-sdk-15/lib
> $JAVA_HOME/bin/java -version
openjdk version "15" 2020-09-15
OpenJDK Runtime Environment (build 15+36-1562)
OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)

> $JAVA_HOME/bin/java --module-path $PATH_TO_FX --add-modules javafx.controls -cp build/classes HelloFX

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Prism-ES2 Error : GL_VERSION (major.minor) = 1.4
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:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.UnsupportedOperationException: Internal Error
    at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$new$6(GtkApplication.java:189)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
    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:280)
    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

其他一些网站例如如何在 WSL2 上设置有效的 X11 转发 https://stackoverflow.com/questions/61110603/how-to-set-up-working-x11-forwarding-on-wsl2/61110604提及使用export LIBGL_ALWAYS_INDIRECT=1。通过此设置,2libGL error消息未打印,但我得到相同的错误堆栈。

swing/AWT java 应用程序从相同的 bash 运行,具有相同的DISPLAY运行良好,没有错误。我正在使用OpenJDK15 Linux http://jdk.java.net/java-se-ri/15 and Gluon JavaFX 15 https://gluonhq.com/products/javafx/。我也尝试过jlink使用 JDK15 和 JavaFX 模块制作 JRE - 相同的错误消息。

正如建议的那样,当运行时-Djdk.gtk.verbose=true出现以下消息:

checking GTK version 3
trying GTK library libgtk-3.so.0
trying GTK library libgtk-3.so
trying GTK library libgtk-x11-2.0.so.0
trying GTK library libgtk-x11-2.0.so

感谢 @José Pereda 和 @mipa 的评论,它们帮助我修复了问题,添加了 libgtk-3

sudo apt install libgtk-3-0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在适用于 Linux 的 Windows 子系统上运行 JavaFX 15 应用程序时出现内部错误 的相关文章

  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi

随机推荐

  • 如何在本地调试EventHubTrigger?

    我正在尝试在本地调试 Azure 函数 这是一个EventHubTrigger 问题是我需要在本地调试代码 因为我仍然没有 真实 设置 我的代码目前如下所示 public static class Notificator FunctionN
  • 如何在 Spring Boot 中使用 Mapstruct 映射父级和子级?

    我有父级 产品 和子级 书籍 家具 并且希望将产品实体映射到产品 DTO 如您所见 产品被映射并存储在数据库中的单个表中 如何映射具有子项额外详细信息的父项产品 我看过this https stackoverflow com questio
  • 运行Qemu后只是黑屏

    我刚刚安装了 QEMU 并编译了支持 ARM 的 Linux 内核 但是当我运行下面的命令时 qemu system arm M versatilepb m 128M kernel home arit QEMU linux 3 8 4 ar
  • 在 RealityKit 中锚定多个场景

    将多个场景 来自 Reality Composer 加载到 arView 时 场景不会锚定在同一空间中 在此示例中 scene1 在应用程序启动时加载 按下按钮后 scene2就被添加到场景中 在这两个场景中 模型都放置在原点 并预计与添加
  • 无法在 WPF 中设置动画后的属性

    我使用以下代码为我的窗口设置动画 winLogin login new winLogin login Owner this login Show DoubleAnimation da new DoubleAnimation da From
  • 说服 Webpack 解释其“无法解析 'foo'” 错误

    我怎样才能说服Webpack 当它要发出时Can t resolve foo also 发出有关的信息它尝试过的地方 to find那个图书馆 错误信息Can t resolve foo 没有帮助 因为这是一条死胡同 读者不知道 Webpa
  • 仅使用 css/bootstrap 粘性多个表头 (thead) 行

    我试图在下面有多行 thead 标签被粘贴 而表格的其余部分是可滚动的 This https stackoverflow com questions 12266262 position sticky on thead 59690013 59
  • 按下主页按钮后如何在后台设置 CABasicAnimation 动画?

    我是ios开发的新手 我在我的项目中使用轮子图像 动画在前景模式下工作正常 之后我按下主页按钮 现在我重新启动应用程序 滚轮动画不起作用 这是我的代码 CABasicAnimation animation CABasicAnimation
  • 模块中子应用程序之间的 Angular2 路由

    我正在将 Angular 2 1 用于一个大型应用程序 该应用程序具有多个子模块 每个子模块定义按功能组织的子应用程序 顶层模块通过导入每个子应用程序的路由等 为 RouterModule 配置整个应用程序的所有子路由 因此 从子应用程序的
  • 如何在 LINQ to Entities 查询中实现查询拦截? (C#)

    我正在尝试在 EF4 中实现加密列 并使用 CTP5 功能来允许简单地使用 POCO 来查询数据库 抱歉 这是很多话 但我希望下面的内容足以解释需求和问题 那么 一些背景知识以及我迄今为止的进展 目的是 如果您在不使用我们的 DAL 的情况
  • Scala 解析器组合器:在流中解析

    我在 scala 中使用本机解析器组合器库 我想用它来解析许多大文件 我已经设置了组合器 但是我尝试解析的文件太大 无法一次读入内存 我希望能够通过解析器从输入文件流式传输并将其读回磁盘 这样我就不需要一次将其全部存储在内存中 我当前的系统
  • 创建一个新的 SVGTransform 对象以附加到 SVGTransformList

    我正在使用 Firefox 3 6 想在单击时向 svg 元素添加翻译 该元素已经有其他翻译 var svgs document getElementsByTagName svg svg var group svgs 0 childNode
  • 未从 lambda 函数调用 aws ses.sendEmail

    我用 node js 编写的 lambda 函数非常简单 当 dynamo 数据库中出现新条目时 将调用 Lambda 然后我想循环遍历每个条目并发送电子邮件 由于某种原因 我无法理解为什么 ses SendEmail 函数从未被调用 我将
  • 如何将 PHP 中的数据插入到 MariaDB 中?

    我熟悉 MySql 数据库 但有一个名为 MariaDB 的新数据库 我尝试从 PHP 代码插入数据但不能 那么你能帮我插入数据吗 我的服务器上的 PHP 版本是 5 4 32 MySQL 版本是 10 0 20 MariaDB cll l
  • JavaScript 拆分如何处理阿拉伯语和英语数字字符串?

    当我尝试拆分时 8635 split 然后 JavaScript 给我这个结果 0 1 8635 console log 8635 split 当我尝试拆分时 2132 split 它给了我这个不同的结果 0 2132 1 console
  • 从三个不同的表创建一个表

    我在 SQL 中有三个表 我需要将它们全部合并为一个 我需要一张表中所有表的所有字段 所有表都包含来自三个不同年份的相同字段 我写了一段代码 CREATE TABLE COL TBL TRAINING ALL YEARS AS SELECT
  • 给定角度和线上的点绘制一条线

    在我的图像中 我有一个三角形 代表箭头 该箭头定义了在同一图像中进一步搜索所考虑的方向和区域 例如 如果我有一个相对 x 轴旋转 30 度的三角形 并且它的尖端位于图像中的 250 150 处 我想找到并画一条垂直于三角形尖端的线 如下图所
  • python lxml 树,line[] 创建多行,需要单行输出

    我正在使用 lxml 使用 python 创建一个 xml 文件 我正在逐行解析文件 查找字符串 如果该字符串存在 我将创建一个子元素 我正在为 SubElement 分配一个值 该值存在于解析文件中我正在搜索的字符串之后 问题 如何将所有
  • 将 Jquery Ajax 与 PHP 结合使用

    我有用 javascript ajax 编写的代码 我喜欢将相同的代码传输到 jquery 中 这是我的 javascript Ajax 代码 function cascadeCountry value if document getEle
  • 在适用于 Linux 的 Windows 子系统上运行 JavaFX 15 应用程序时出现内部错误

    当我尝试在适用于 Linux WSL2 Ubuntu 20 04 的 Windows 子系统上运行 JavaFX 15 应用程序时 我遇到了困难 需要有关后续尝试步骤的建议 到目前为止 我已经能够在 WSL 内运行我通常在 Windows