我有数百个在EDT中运行的不同功能。其中很多包括长时间运行的任务,有些包括对GUI的更改。有时用户图形用户界面会挂起,但由于图形用户界面在100%的时间内不在同一区域发生,所以很难跟踪发生这种情况的所有位置。该问题不是高优先级,因为挂起通常在窗口最小化/最大化之后开始工作,但最终需要完成。替代SwingWorker或如何在这种情况下实现它...?
经过一番研究后,我发现我可以在SwingWorker下使用doInBackground()来处理任何劳动敏感的工作方法,并在GUI绘图中使用done()。另外,我相信我可以使用SwingUtilities.invokeLater来处理恰好在doInBackground()函数中的每个GUI绘图。但是,我想避免在代码中调整数百个函数中的每一个。
有没有一种方法可以使用单个SwingWorker并将任何长时间运行的方法发送到doInBackground()函数?对于使用SwingWorker的每个错位的GUI代码多次使用invokeLater函数是而不是的一个问题,因为它不是那么频繁。
如果这是不可能的,是否有某种替代方法可以使用?谢谢。
我想我写了部分的问题不正确。我想避免使用SwingWorker重写这些方法中的所有长时间运行的任务,并希望能够拥有一个可以使用所有方法的SwingWorker。 多次使用SwingUtilities.invokeLater不是**问题,因为它不会经常发生。 我将编辑我的帖子并修复通信错误。 –
不幸的是,你不能多次重复使用同一个SwingWorker。 –
好的,我将不得不单独为每种方法添加SwingWorkers。谢谢! –