簡體   English   中英

JavaFX - MediaPlayer - 如何在媒體播放器加載圖像時更改 cursor?

[英]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 一個視頻。 選擇后,視頻將開始在 MediaPlayer 中播放。 加載視頻需要一些時間,具體取決於視頻的大小。 在此期間,我試圖將 cursor 更改為 WAIT cursor,以便用戶知道系統正在處理他們的請求。

我沒有嘗試過任何工作。 我已刪除或注釋掉在整個代碼庫中將 cursor 更改回 DEFAULT 的所有行。 我在每個 JavaFX 節點上將 cursor 設置為 WAIT,我可以找到該方法。 我在打開 FileChooser 並將視頻加載到 MediaPlayer 的按鈕操作方法中的每一行代碼之間剪切並粘貼了以下行:

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

在整個視頻加載過程中,cursor 是 ARROW。 視頻加載后,cursor 將更改為 WAIT。 我只是找不到在視頻加載時更改 cursor 的方法。 請幫忙。

謝謝。

這一切都與 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM