javax.swing.SwingWorker类的一个问题

jdgdf566 2013-12-16 03:41:31
SwingWorker,如果只需要done(),不需要doInBackground(),也就是不需要在另一个线程中做任何事情。那么我在doInBackground()中写return null;它还是要使用另一个线程执行这一句,虽然就只有一句。怎么才能完全不使用另一个线程?
我想使用javax.swing.SwingWorker类来写done()里面的操作,写起来比较简单规范一些,例如可以利用javax.swing.SwingWorker只执行一次的特性,要不然还得自己写控制代码,虽然写也不复杂。
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdgdf566 2013-12-17
  • 打赏
  • 举报
回复
引用 1 楼 raistlic 的回复:
不明白你的需求。 当前线程为EDT,目标调用需在EDT中执行时: 同步调用,直接调用即可。 异步调用,可以用 SwingUtilities.invokeLater(Runnable) 如果没有需要后台线程运行的东西,就不要用 SwingWorker 。
引用 2 楼 Gaowen_HAN 的回复:
[quote=引用 1 楼 raistlic 的回复:] 不明白你的需求。 当前线程为EDT,目标调用需在EDT中执行时: 同步调用,直接调用即可。 异步调用,可以用 SwingUtilities.invokeLater(Runnable) 如果没有需要后台线程运行的东西,就不要用 SwingWorker 。
+1, new Thread()....[/quote] 假如按钮点下去,正在执行事件,还没弹上来,又点击了一次,会执行两次吗?要不要加点措施,例如按钮setennable=false
fearlessMore 2013-12-17
  • 打赏
  • 举报
回复
引用 1 楼 raistlic 的回复:
不明白你的需求。 当前线程为EDT,目标调用需在EDT中执行时: 同步调用,直接调用即可。 异步调用,可以用 SwingUtilities.invokeLater(Runnable) 如果没有需要后台线程运行的东西,就不要用 SwingWorker 。
+1, new Thread()....
raistlic 2013-12-17
  • 打赏
  • 举报
回复
不明白你的需求。 当前线程为EDT,目标调用需在EDT中执行时: 同步调用,直接调用即可。 异步调用,可以用 SwingUtilities.invokeLater(Runnable) 如果没有需要后台线程运行的东西,就不要用 SwingWorker 。
jdgdf566 2013-12-17
  • 打赏
  • 举报
回复
引用 4 楼 raistlic 的回复:
[quote=引用 3 楼 jdgdf566 的回复:]假如按钮点下去,正在执行事件,还没弹上来,又点击了一次,会执行两次吗?要不要加点措施,例如按钮setennable=false
假如按钮点下去,正在执行事件,则EDT被占用,此时“又点击了一次”,点击事件会被排进队列,等本次事件被执行完之后再执行。 简短回答是: 会执行两次。 要不要处理则看需求,如果按钮事件引发的操作明显耗时,那直接在ui线程处理可能不是好的设计,因为用户看到的是按钮按下去以后界面就卡住不动。[/quote]多谢了。
raistlic 2013-12-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/raistlic/article/details/17375319
raistlic 2013-12-17
  • 打赏
  • 举报
回复
引用 3 楼 jdgdf566 的回复:
假如按钮点下去,正在执行事件,还没弹上来,又点击了一次,会执行两次吗?要不要加点措施,例如按钮setennable=false
假如按钮点下去,正在执行事件,则EDT被占用,此时“又点击了一次”,点击事件会被排进队列,等本次事件被执行完之后再执行。 简短回答是: 会执行两次。 要不要处理则看需求,如果按钮事件引发的操作明显耗时,那直接在ui线程处理可能不是好的设计,因为用户看到的是按钮按下去以后界面就卡住不动。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧