2013-08-31 62 views
-1

我有一个GUI,其中当点击一个按钮时,必须启动一个while循环。但在启动while循环时,GUI将暂停,直到while循环终止。有什么办法可以绕过这个吗?Java while while循环没有暂停当前线程

+2

我想你应该提供一些代码。 –

+2

在新线程中启动你的while循环。 – pepuch

+2

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ – assylias

回答

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中,您可以使用lambda表达式:

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

你可以删除while通过利用作为某种监听器的interface进行循环。

+0

谢谢,那很好。 – user1959216

0

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

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

new Thread(r).start(); 
0

正如@kayton所说,将您的代码包装在Runnable中。 (或者可能是Callable)

但是,如果您不断创建并在您的代码中创建自己的线程,它很快就会变得难以管理。改为查看ExecutorService或SwingWorker。

+0

为什么downvote?至少有礼貌和勇气来解释。 – user949300

0

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