2015-12-17 177 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); 
}