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

问题描述 投票:0回答:1

我的类扩展了一个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,这种情况也会发生。

java user-interface javafx gluon gluon-desktop
1个回答
0
投票

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.