[問題] SwingWorker 比較好的用法

看板java作者 (CA)時間16年前 (2009/08/08 22:10), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
我在 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

08/09 03:54, , 1F
什麼叫做把這種暫時變數提升為 field
08/09 03:54, 1F

08/09 18:54, , 2F
就把 result 那個變數弄成 private field
08/09 18:54, 2F

08/10 16:39, , 3F
直接override doInBackground()回傳result 在done()裡面
08/10 16:39, 3F

08/10 16:42, , 4F
再把結果接回去就ok了 不只一次的話就用publish & process
08/10 16:42, 4F
文章代碼(AID): #1AVOTTG1 (java)