2017-02-25 54 views
1

因此,我一直在使用JavaFX開發媒體播放器應用程序一段時間。不幸的是,我遇到了一個我不知道如何解決的問題。我的GUI中用於顯示視頻進度的滑塊無法正常工作。它結束得太早。所以視頻一直持續到結束,但滑塊已停止。JavaFX 8媒體播放器進度滑塊

任何幫助將不勝感激。

Double time = player.getTotalDuration().toSeconds(); 

    player.currentTimeProperty().addListener((ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) -> { 
     slider.setValue(newValue.toSeconds()); 
    }); 
    slider.setOnMouseClicked((MouseEvent mouseEvent) -> { 
     player.seek(Duration.seconds(slider.getValue())); 
    }); 
+0

您是否使用'slider.setMax()'/能夠告訴視頻在播放之前有多長時間? –

+0

不,我不是。我應該在播放前獲得視頻的長度嗎? – Matheus

+0

是的,「滑塊」的默認最大值爲「100」,這意味着您的滑塊似乎在1分40秒左右完成?你將不得不計算視頻的秒數,然後用它來設置滑塊的最大值。 –

回答

1

你需要滑塊的max property等於你正在播放的媒體的總秒數。請注意,直到媒體播放器從媒體資源中讀取了足夠的信息之後纔會知道媒體的totalDuration。最好的方法是使用此綁定:

slider.maxProperty().bind(Bindings.createDoubleBinding(
    () -> player.getTotalDuration().toSeconds(), 
    player.totalDurationProperty())); 

在某些情況下,媒體資源將不會指示總持續時間;在這種情況下,將滑塊連接到玩家當前時間可能是不可能的,除非您有其他機制瞭解總持續時間。

+0

您的解決方案工作。但是我必須將maxValueProperty()更改爲maxProperty()才能正常工作。 – Matheus

+0

@Matheus是的,對不起:修正了這個問題。 –