作者legnaleurc (CA)
看板java
标题[问题] SwingWorker 比较好的用法
时间Sat Aug 8 22:10:34 2009
我在 ActionPerformed 的 method 里有一段 loading 很重的叙述:
while( !table.isEmpty() ) {
Result result = HEAVY_OPERATION(); // 1
tree.addResult( result ); // 2, tree is a JTree
table.remove( result );
}
1 的地方就是会执行很久的部分
因为整个是在 EDT 里,所以会 hang 住 GUI
我希望把它拿到另一个 thread,return 之後再让 EDT 去更新 GUI
中间我可以让 GUI 做其他事,比方说 show progress 之类的
试过原地 new 一个 Thread,好像没用
找了找资料,好像 SwingWorker 是正解
但是它好像比较适合 one shot 的方式
或是要用 PropertyListener 去监听 field
不过我不太喜欢把这种暂时变数提升为 field
请问有比较好的做法吗?
--
自High笔记(半荒废)
http://legnaleurc.blogspot.com/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.205.248.119
1F:推 undeadj:什麽叫做把这种暂时变数提升为 field 08/09 03:54
2F:→ legnaleurc:就把 result 那个变数弄成 private field 08/09 18:54
3F:推 SuM0m0:直接override doInBackground()回传result 在done()里面 08/10 16:39
4F:→ SuM0m0:再把结果接回去就ok了 不只一次的话就用publish & process 08/10 16:42