我需要执行的任务包括从外部服务器请求一些数据,对数据执行一些(相当冗长的)处理,然后使用处理结果更新GUI。由于服务器可能没有响应,因此该任务非常适合SwingWorker:方法获取结果,然后done方法更新GUI。使用计时器启动SwingWorker?
我需要这种情况每隔几秒发生一次。我知道我可以使用while循环和Thread.sleep,并在每次睡眠后创建一个新的SwingWorker。但是我读过的所有东西在使用循环和睡眠时都会皱眉。我想使用一个计时器,但:
使用摆动计时器似乎适得其反;因为它们在EDT上运行,所以我基本上没有理由使用SwingWorker的doInBackground方法。如果服务器没有响应,则GUI将无响应。
使用java.util.Timer看起来有点浪费:它似乎为TimerTask()创建了一个后台线程,并且由于我只是创建了一个SwingWorker来完成实际的工作,我本质上是创建了一个创建另一个后台线程的后台线程。
有人可以告诉我什么是最好的解决方案?我想坚持使用SwingWorker,因为它看起来非常适合这项任务,但是如果我能够帮助它,我想避免使用while循环。
感谢
我的问题是一样的气垫船全鳗鱼,为什么用java.swing.Timer似乎适得其反,这只是你的timming何时何地你会打电话给java.swing。Timer myTimer#.setDelay(int in miliseconds); – mKorbel 2011-05-16 10:53:34