首页 > 解决方案 > 应用程序窗口可见后的 JavaFX 事件

问题描述

我需要执行一些本机代码来与 macOS 菜单栏进行交互,最好是在它初始化后立即执行。恕我直言,在 JavaFX 应用程序窗口变得可见之后是个好时机。

从文档中,我认为Window.onShown应该这样做:

在窗口显示后立即调用。

但情况似乎并非如此。将断点放入 的事件处理程序时Window.onShown,窗口尚不可见。不幸的是,此时 macOS 菜单栏尚未完全初始化,因此我对菜单栏所做的所有更改都将在稍后被 JavaFX 的默认菜单栏覆盖。

目前,我只是在WindowEvent.WINDOW_SHOWN发送后使用 1 秒的延迟,但这似乎不是一个好的解决方案。那么有没有人对如何可靠地确定窗口何时实际可见或所有初始化完成有更好的想法?

标签: macosjavafxjavafx-8

解决方案


如果您在onShown方法中设置断点,问题可能只是创建了窗口,但由于调试器而阻塞了可视化。

如果不是这种情况,您可以尝试使用类的isShowing方法创建一个Thread仅检查窗口可见性的新窗口。Window

这应该比在onShown调用方法后等待一秒钟要快。


推荐阅读