SwingWorker是唯一的方法吗?

Ale*_*lls 1 java swing multithreading swingworker

我发现为了保持Java GUI(使用Swing)响应,唯一的方法是使用SwingWorker类,而不是java.lang.Thread.SwingWorker是否真的是基于多线程GUI的桌面应用程序的唯一途径?有什么好的选择吗?我很少能配置Thread类来做我想做的事情,但SwingWorker通常可以工作,如果有时候是以麻烦的方式.

Mar*_*nik 9

SwingWorker只不过是一个简单的便利API Thread.因此,它是绝对有可能使用ThreadSwingWorker.重点是Swing不是线程安全的,您在Swing对象上执行的任何操作都必须在Event Dispatch Thread上进行.这是一个根本障碍,并SwingWorker试图帮助你更方便地克服它.


tra*_*god 7

替代方案是继续使用EventQueue.invokeLater(),但SwingWorker具有重要优势:

  • 它同步对自身与EDT之间共享的数据的细粒度访问.

  • 它为进度指示提供属性更改支持.

  • 它实现了Future接口.

有关详细信息,另请参阅Worker Threads和SwingWorker.