Eli*_*ist 2 java performance swing awt
对于我们应用程序中的一些UI组件,我们覆盖paintComponent,在某些情况下"递归地"通过调用来调用自身repaint.我们使用这种方法来实现组件中动画的高刷新率.
例如,我们使用的进度条看起来像:
public class SimpleProgressBar extends JPanel {
private boolean inProgress;
....
@Override
protected void paintComponent(Graphics g) {
if (inProgress) {
paintBar(g);
repaint();
} else {
doSomeOtherThings();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的做法(特别是在性能/效率/ CPU使用方面)?
在组件中使用Timer或后台线程更好repaint吗?
这是一个很好的做法(特别是在性能/效率/ CPU使用方面)?
不,这不是好习惯.从内部调用重绘paintComponent是不好的做法,因为:
使用Timer或后台线程重新绘制组件是否更好?
是的,使用Timer或者Thread可以更好地控制帧速率,而不会在执行此操作时阻碍EDT.根据上下文,Timer在EDT上运行(而不是线程),因此不需要调度到EDT.