0

我正在尝试JRadioButtons使用此闪烁方法同时使多个闪烁:

private void blink(JRadioButton button, boolean blinking)
{
    if(blinking)
    {
        while(true)
        {   
            try 
            {
                button.setSelected(true);
                Thread.sleep(500);
                button.setSelected(false);
                Thread.sleep(500);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
    else
    {
        button.setSelected(false);
    }
}

我知道它与线程有关,但我对它们并不熟悉。

4

2 回答 2

3

我正在尝试使用此闪烁方法使多个 JRadioButtons 同时闪烁

恕我直言,您不需要多个 while 循环。

只需将要闪烁的所有按钮添加到 中ArrayList,然后在同一个while循环中,遍历该列表并闪烁按钮。所以,而不是

button.setSelected(true);
Thread.sleep(500);
button.setSelected(false);
Thread.sleep(500);

您可以使用

for(int i=0; i<yourList.size(); i++) {
    yourList.get(i).setSelected(true);
}
Thread.sleep(500);
for(int i=0; i<yourList.size(); i++) {
    yourList.get(i).setSelected(false);
}
Thread.sleep(500);

但这是一个不好的做法。使用Timer500类并安排一个线程每隔ms执行一次:

Timer t = new Timer(500, new ActionListener() {
    boolean selected = false; 

    @Override
    public void actionPerformed(ActionEvent e) {
        selected = !selected;
        for(int i=0; i<yourList.size(); i++) {
            yourList.get(i).setSelected(selected);
        }
    }
});
t.start();
于 2013-09-18T09:54:17.510 回答
3

您不能使用Thread.sleep. 事实上,您绝不能调用Thread.sleepEvent Dispatch Thread,因为该线程负责重新绘制 GUI,而它在睡眠时显然无法执行此操作。

您必须使用的是 Swing Timer 类并安排它以所需的时间间隔重复。

于 2013-09-18T09:55:31.887 回答