如何减轻java swing线程

时间:2015-05-06 19:51:45

标签: java multithreading swing repaint

我有一些java代码用于3个上下文中的缩放动画:1。alt-scroll,2。按下按钮时静态150ms动画(睡眠时间为10ms的循环),以及3.通过点击 - 按住线程中的循环完成的按钮(一个100ms睡眠的循环,只要按住鼠标按钮,它就会继续缩放)。

每个机制调用相同的方法进行缩放增量。在该方法中,独立管理每个轴上的缩放(即缩放x并缩放y)。

然而,虽然机制#1& #2工作得很好,我遇到#3问题。有时重绘是在流中进行的,这意味着有时会在每个维度更新之间触发重绘,这会导致缩放动画看起来不稳定。

我尝试了不同方法的多种变体来控制重新绘制以获得不同程度的成功。

  1. 在命令行上尝试设置-Dswing.volatileImageBufferEnabled = false - 根本不起作用
  2. 尝试在各个地方立即调用paint - 根本不起作用
  3. 尝试使用RepaintManager.currentManager(c).markCompletelyClean(c)和RepaintManager.currentManager(c).markCompletelyDirty(c)的组合 - 虽然这可以防止重新绘制,但我无法弄清楚如何获得它可靠地绘制每个变焦增量。
  4. 尝试使用setVisible(boolean) - 这可以阻止每个维度中更新之间的生涩重绘,但导致面板在每次重绘时“闪烁”
  5. 也许我只是没有弄清楚调用内容的正确顺序。有谁知道如何管理它?我怀疑发生这种情况的原因是因为更新是从线程生成的,而其他机制是串行发生的,但我知道没有其他方法可以使用swing来检测按钮按下时的点击保持事件。

0 个答案:

没有答案