首页 > 解决方案 > JavaFX - MediaPlayer - 如何在媒体播放器加载图像时更改光标?

问题描述

我在 Windows 10 上使用 OpenJDK 15.0.1 和 JavaFX 15.0.1。

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

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

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

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

谢谢。

标签: javajavafxmedia-player

解决方案


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

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

这是示例代码:

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();

推荐阅读