【问题标题】:JavaFX - MediaPlayer - How do I change the cursor while the media player is loading the image?JavaFX - MediaPlayer - 如何在媒体播放器加载图像时更改光标?
【发布时间】:2021-01-29 22:23:17
【问题描述】:

我在 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);

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

谢谢。

【问题讨论】:

    标签: java javafx media-player


    【解决方案1】:

    这一切都与 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      相关资源
      最近更新 更多