Java启动while循环而不暂停当前线程

时间:2013-08-31 17:33:00

标签: java multithreading loops while-loop

我有一个GUI,当点击一个按钮时,必须启动while循环。但是在启动while循环时,GUI将暂停,直到while循环终止。有没有办法绕过这个?

4 个答案:

答案 0 :(得分:1)

我认为通常会阻止这种情况发生,您应该为冗长的计算创建另一个Thread,然后通过EDT更新GUI(使用SwingUtilities.invokeLater(Runnable);

因此,在您的情况下,按下该按钮时,它将如下所示:

final Thread thread = new Thread(
        new Runnable(){
            public void run(){
                while(condition){
                    .....
                }
                //update gui
            }
        }
);
thread.start();

或者,如果您使用的是Java 8,则可以使用lambdas:

final Thread thread = new Thread(
        () -> {
            while(condition){
                .....
            }
            //update gui
        }
);
thread.start();

您可以使用while充当某种类型的侦听器来删除interface循环。

答案 1 :(得分:0)

在Runnable中包装while循环并使用线程启动该runnable。注意:new Thread(r).run();将在同一个线程上运行它。下面的代码不应该。

 Runnable r = new Runnable() {
     public void run() {
         while(whatever){
         //do stuff
         }
     }
 }

 new Thread(r).start();

答案 2 :(得分:0)

正如@kayton所说,将代码包装在Runnable中。 (或者也许是可赎回的)

但是,如果您经常在代码中创建和启动自己的线程,很快就会变得难以管理。请改为查看ExecutorService或SwingWorker。

答案 3 :(得分:0)

从设计角度来看,这更多是建议方面,而不是解决技术问题,我认为暂停GUI并不是一个好主意。您可以显示一个旋转的圆圈,告诉用户窗帘后面会有一些动作。暂停屏幕可能会让用户烦恼。