2015-12-17 175 views
1

我有一個窗口顯示一個視頻流,其中包含一個twitter feed作爲疊加層。 當顯示新的推文時,使用旋轉動畫生成當前推文,並將下一條推文旋轉到視圖中。動畫使用RotateTransition執行。JavaFX動畫閃爍

該應用程序還可以在不同的攝像頭之間切換以顯示不同的流。爲了指示應用何時切換到下一個攝像頭,我有一個進度條,使用Timeline對象填充。

這很好,直到我調整窗口大小。隨着漸進式填充,旋轉動畫隨着進度條開始閃爍。

作爲測試,我禁用了視頻流,看看發生了什麼。那時'artifact'不會出現,我可以根據需要調整大小。如果我播放流並且不調整大小,那麼一切正常。

該視頻播放器基於VLCJ,但實際像素是在WritableImageImageview上繪製的。

請參閱下列說明問題的圖像。

Normal mode, no video playing

Bugged mode, while video playing

在你可以看到2個不同的進度條(一ProgresBarProgressIndicator)的右下角。

閃爍結果的一部分在第二張圖像下仍然可見。它以某種方式保持可見,可能是因爲該區域未被重繪。

任何想法是什麼使閃爍發生?我能做些什麼來解決或避免這種情況?

我嘗試了IntelliJ中的一些VM選項:-Dsun.java2d.d3d=true -Dprism.forceGPU=true以某種方式啓用硬件加速,但這似乎沒有幫助。

禁用進度條填充動畫也沒有幫助。

回答

1

我有一個類似的問題,有些弧線和形狀會在其屬性/大小發生變化時閃爍。

我的問題的解決方案是確保用於更改形狀的方法從JavaFX線程內調用。

Platform.runLater(() -> { 
    arc.setStartAngle(30); 
    arc.setLength(45); 
}