2012-03-30 44 views
1

我在swing中编写我的代码。启动另一个可以在awt线程中调用的类的私有函数。我只需在SwingUtilities.invokeLater线程中将该函数的代码写入我的课程中。线程没有从SwingUtilities.invokeLater返回到主线程

main() { 

    SwingUtilities.invokeLater(new Runnable() { 

     //code of private function 

    }); 

} 

但在执行此控件后不会回到主线程。任何人都可以建议发生了什么以及如何解决这个问题?

回答

3

SwingUtilities.invokeLater不会阻塞当前线程的执行。如果相信它,你可以简单地做

System.out.println("Before"); 

SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      //code of private function 
     } 
    }); 

System.out.println("After"); 

,你会看到BeforeAfter之后彼此或多或少立即打印。

(请确保您有不小心使用SwingUtilities.invokeAndWait。)

1

SwingUtilities.invokeLater(Runnable)将执行在EDT的代码,你已经正确地指出。 main线程在invokeLater的调用之后继续执行。如果您在调试器中执行程序并在EDT中执行的代码中某处存在断点,您可能看不到主线程,但执行线程时肯定会执行该线程。