JavaFX阶段*有时*在Win10上出现空白。

我的类扩展了一个JavaFX Stage。在开发环境中,它从未发生过加载和处理失败的情况,但我的用户经常报告说,有时它不能正确地显示出 在Windows 10上,它看起来像这样.

类本身是一个相当标准的事情,我用Platform.runLater()触发它,线程按预期处理。每一个日志输出都会被写出来,并且可以按照程序与屏幕交互,或者关闭屏幕,这不会触发任何错误或异常。

阶段构造函数非常基本。

  log.debug("Constructing the screen.");

  setTitle("Screen");
  setAlwaysOnTop(true);
  initStyle(StageStyle.UNDECORATED);

  try {
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(getClass().getResource("....fxml"));

        Pane panel = fxmlLoader.load();
        controller = fxmlLoader.getController();
        controller.postInit(currentIdle); // some elements processed

        Scene scene = new Scene(panel);
        setScene(scene);

        scene.setOnKeyPressed(controller::handleKeyEvent);
        setOnHiding((WindowEvent e) -> processor::leaveScreen);
        log.debug("Showing the screen.");
        show();
        log.debug("Screen shown.");

        requestFocus();
        log.debug("Finished constructing the screen.");

} catch (IOException e) {
    // ...doesn't go here
}

从日志上看,所有的东西似乎都在按预期工作,包括控件,键盘快捷键和leaveScreen()钩子,也没有异常,除了用户有时看不到屏幕上的内容和控件。

我到底在看什么?是我的代码有问题,还是JavaFX的bug?是用户笔记本上的图形问题?你能不能想办法防止或至少检测到这种状态,并以某种方式强制刷新?

另外,在什么情况下,一个JavaFX阶段没有出错地通过了show()方法,但实际上没有显示其内容?

受影响的环境。所有最新的JDK 14 GA、Corretto 11(自定义jlink创建的图像)和JavaFX 11.0.2或14.0.1的组合–这没有区别。无论应用程序是否使用jpackage或Advanced Installer安装jlinked JRE,这种情况也会发生。

解决方案:

很难帮助没有更多的信息,但2件事,我不得不使用在过去的Windows问题是

Thread.currentThread().setContextClassLoader(App.class.getClassLoader());

垫底 start(Stage stage) 方法,其中 App 显然是用您的扩展类的名称替换为 Application

我使用的另一个 “修复方法 “是

System.setProperty("glass.accessible.force", "false");

以此来解决点击失焦节点的问题。

给TA打赏
共{{data.count}}人
人已打赏
未分类

树形ort dart - 根据父子关系对列表进行重新排序。

2022-9-8 23:50:18

未分类

在Node.js中,如何打破一个函数内的无限循环?

2022-9-8 23:50:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索