swing AWTEventQueue0一直在运行,java中的程序变得非常慢
我正在写gui。在这个gui中,有很多形状(大约200个)。我用画法画了它们
在一种情况下,我必须让它们眨眼(在两种颜色之间切换)。在for循环中,我改变了它们的颜色,然后是fram。重新油漆()
然而,当我点击一些按钮时,过了一段时间,程序变得非常慢。我通过Profile进行了检查(我使用的是Netbeans)。我看到AWT事件队列在一段时间后开始一直运行
所以,我可以有两个解决方案:
有没有办法拆分AWT EventQueue或添加另一个AWT EventQueue?或者有没有更好的方法来制作200个眨眼形状
谢谢!
注意:详细地说,我看到了pumpEvents、pumpEventsForHierarchy、pumpEventsForFilter、PumponeEventFilter
以下是绘画方法:
@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(bs_3);
g2d.setColor(currentcolor);
g2d.draw(line);;
}
以下是帖子:
paintTimer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mframe.repaint();
for (CircuitPanel cp : mframe.cppL){
cp.onOff();
}
});
paintTimer.start();
以下是颜色变换器的方法:
@Override
public void onOff() {
if(currentcolor.equals(offcolor)){
currentcolor=oncolor;
}else{
currentcolor=offcolor;
}
}
# 1 楼答案
这个example展示了一种方法。它在另一个由
javax.swing.Timer
维护的线程上标记时间,以便调整闪烁的速度。要在目标平台上评测,可以通过更改N
和计时器的初始周期1000 ms
来轻松缩放示例。因为javax.swing.Timer
的实例使用一个共享线程,所以每个组件都可以有自己的计时器,如here所述