Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:同时运行多个while循环_Java_Multithreading_Swing_While Loop_Thread Sleep - Fatal编程技术网

Java:同时运行多个while循环

Java:同时运行多个while循环,java,multithreading,swing,while-loop,thread-sleep,Java,Multithreading,Swing,While Loop,Thread Sleep,我正在尝试使用此闪烁方法同时使多个JRadioButtons闪烁: private void blink(JRadioButton button, boolean blinking) { if(blinking) { while(true) { try { button.setSelected(true); Thread.slee

我正在尝试使用此闪烁方法同时使多个
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);
    }
}
我知道这与线程有关,但我对它们不太熟悉

我正在尝试使用这个闪烁方法使几个jradiobutton同时闪烁

我想你不需要多个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);
我正在尝试使用这个闪烁方法使几个jradiobutton同时闪烁

我想你不需要多个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);

您不能使用
Thread.sleep
为GUI设置动画。事实上,您决不能在事件调度线程上调用
Thread.sleep
,因为正是该线程负责重新绘制GUI,这显然是它在睡眠时无法做到的


您必须使用的是Swing Timer类,并计划它以所需的间隔重复。

您不能使用
线程.sleep来设置GUI的动画。事实上,您决不能在事件调度线程上调用
Thread.sleep
,因为正是该线程负责重新绘制GUI,这显然是它在睡眠时无法做到的


您必须使用的是Swing Timer类,并计划它以所需的间隔重复。

发布的代码可能在不同的线程(而不是EDT)上运行。但这当然仍然是错误的,因为您不能从另一个线程调用Swing方法。如果要使用调用器来更正代码,那么代码就会变得一团糟,使用额外的线程也没有什么用处。可能发布的代码运行在不同的线程(而不是EDT)上。但这当然仍然是错误的,因为您不能从另一个线程调用Swing方法。如果使用
invokeLater
来更正代码,那么它将变成一团乱麻,使用额外的线程也没有什么用处。