java - 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);
在视频加载的整个过程中,光标都是箭头。视频加载后,光标变为等待。我只是找不到在视频加载时更改光标的方法。请帮忙。
谢谢。
解决方案
这一切都与 UI 线程有关。这不是典型的 UI 阻塞线程问题,因为 MediaPlayer 本身就是一个 JavaFX UI 组件。解决方案有两个:
- 在 UI 线程内启动一个新线程以卸载正在完成的工作。
- 在新线程中,在 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();