有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这个example展示了一种方法。它在另一个由javax.swing.Timer维护的线程上标记时间,以便调整闪烁的速度。要在目标平台上评测,可以通过更改N和计时器的初始周期1000 ms来轻松缩放示例。因为javax.swing.Timer的实例使用一个共享线程,所以每个组件都可以有自己的计时器,如here所述