java - SwingWorker hangs at Unsafe.park() -
i have swingworker
communicates server in background , updates jframe
. debugging app , noticed after swingworker
finished work, thread still remained. hanging @ unsafe.park(java.lang.object)
native method. looked in further , found other swingworker
s in app same thing after finish. can provide source code if wants don't think necessary because problem seems general.
update
i ran app without debugger , problem still happening. dump of swingworker
thread:
"swingworker-pool-2-thread-1" daemon prio=6 tid=0x03219800 nid=0xd74 waiting on condition [0x04b7f000] java.lang.thread.state: waiting (parking) @ sun.misc.unsafe.park(native method) - parking wait <0x22ec63d8> (a java.util.concurrent.locks.abstra ctqueuedsynchronizer$conditionobject) @ java.util.concurrent.locks.locksupport.park(unknown source) @ java.util.concurrent.locks.abstractqueuedsynchronizer$conditionobject .await(unknown source) @ java.util.concurrent.linkedblockingqueue.take(unknown source) @ java.util.concurrent.threadpoolexecutor.gettask(unknown source) @ java.util.concurrent.threadpoolexecutor.runworker(unknown source) @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source) @ java.lang.thread.run(unknown source)
i made sample program uses swingworker
way used in application. program has same problem. here code:
package swingworkerlocktest; import java.util.list; import javax.swing.jframe; import javax.swing.jtextarea; import javax.swing.swingworker; public class swingworkerlocktest { public static void main(string[] args) { final jframe frame = new jframe("frame"); final jtextarea outputarea = new jtextarea(4, 20); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.add(outputarea); frame.pack(); frame.setvisible(true); (new swingworker<object, string>() { @override protected object doinbackground() throws exception { publish("background task."); return null; } @override protected void process(list<string> chunks) { (string str : chunks) { outputarea.append(str + "\n"); } } @override protected void done() { outputarea.append("background task finished."); } }).execute(); } }
this normal behavior of swingworker, thread should terminate after 10 minutes if idle. it's explained here
Comments
Post a Comment