问题 SwingWorker和SwingUtilities.invokeLater之间的区别


我需要在单独的线程中在Swing应用程序中运行一些方法。使用SwingWorker和SwingUtilities.invokeLater有什么区别。我应该使用哪一个在Swing应用程序中运行一个线程?我在教程中找不到确切的信息

http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html


9277
2018-03-18 17:13


起源



答案:


SwingUtilities.invokeLater 如果你有必须在EDT中运行的东西,则使用它。

如果您有一个长期运行的任务,则需要使用a SwingWorker,因为它不在EDT上运行,因此不会导致GUI在运行时冻结。


8
2018-03-18 17:15



谢谢。这通常是我的想法,但我需要保密 - Pawel Szulc


答案:


SwingUtilities.invokeLater 如果你有必须在EDT中运行的东西,则使用它。

如果您有一个长期运行的任务,则需要使用a SwingWorker,因为它不在EDT上运行,因此不会导致GUI在运行时冻结。


8
2018-03-18 17:15



谢谢。这通常是我的想法,但我需要保密 - Pawel Szulc


看起来你想要:

  • 使用 SwingWorker 当您需要监视长时间运行的后台进程的状态时

  • 使用 SwingUtilities.invokeLater 如果你只想要一个简短的任务来运行,但不需要反馈。有点像火与难忘。请记住,它将在AWT事件调度线程中运行,因此您的应用程序在任务运行时不会处理任何事件。


7
2018-03-18 17:18