我需要执行的任务包括从外部服务器请求一些数据,对数据执行一些(相当长的)处理,然后使用处理结果更新 GUI。因为服务器可能没有响应,所以该任务非常适合 SwingWorker:该doInBackground()
方法获取结果,然后 done 方法更新 GUI。
我需要每隔几秒钟发生一次。我知道我可以只使用 while 循环和 Thread.sleep,并在每次睡眠后创建一个新的 SwingWorker。但是我读过的所有内容都对使用循环和睡眠不满意。我想使用计时器,但是:
使用摇摆计时器似乎适得其反;因为它们在 EDT 上运行,我基本上没有理由使用 SwingWorker 的 doInBackground 方法。如果服务器没有响应,则 GUI 将没有响应。
使用 java.util.Timer 似乎有点浪费:它似乎为 TimerTask() 创建了一个后台线程,并且由于我只是创建一个 SwingWorker 来完成实际工作,因此我实际上是在创建一个后台线程来创建另一个后台线程。
谁能告诉我最好的解决方案是什么?我想坚持使用 SwingWorker,因为它似乎非常适合这项任务,但如果我能提供帮助,我想避免使用 while 循环。
谢谢