JavaFX - MediaPlayer - 如何在媒体播放器加载图像时更改光标?

JavaFX - MediaPlayer - How do I change the cursor while the media player is loading the image?

我在 Windows 10.

上使用 OpenJDK 15.0.1 和 JavaFX 15.0.1

我提供了一个 UI 允许用户使用 FileChooser select 从他们的机器上播放视频。 selected 后,视频将开始在 MediaPlayer 中播放。加载视频需要一些时间,具体取决于视频的大小。在此期间,我试图将光标更改为 WAIT 光标,以便用户知道系统正在处理他们的请求。

我试过的都没有用。我已经删除或注释掉了整个代码库中所有将光标更改回 DEFAULT 的行。我在我能找到的每个具有该方法的 JavaFX 节点上将光标设置为 WAIT。我在打开 FileChooser 并将视频加载到 MediaPlayer 的按钮操作方法中的每一行代码之间剪切并粘贴了以下行:

mediaView.setCursor(Cursor.WAIT);
videosTabGrid.setCursor(Cursor.WAIT);
primaryStage.getScene().setCursor(Cursor.WAIT);
primaryStage.getScene().getRoot().setCursor(Cursor.WAIT);

整个视频加载过程中,光标都是箭头。视频加载后,光标立即变为 WAIT。我只是找不到在视频加载时更改光标的方法。请帮忙。

谢谢。

这一切都与 UI 线程有关。这不是典型的 UI 阻塞线程问题,因为 MediaPlayer 本身就是一个 JavaFX UI 组件。解决方案有两个:

  1. 在 UI 线程中启动一个新线程来卸载工作 正在完成。
  2. 在新线程中,运行 UI 改变了一个 Platform.runLater() 方法。

示例代码如下:

primaryStage.getScene().getRoot().setCursor(Cursor.WAIT);
new Thread(){
    public void run() {
        try {
            ...
            [MEDIA PLAYER VIDEO LOAD HERE]
            ...
        } finally {
            Platform.runLater(() -> primaryStage.getScene().getRoot().setCursor(Cursor.DEFAULT));
        } // try finally
    } // run
}.start();