java - Cannot interrupt a thread -
java - Cannot interrupt a thread -
i implementing chatting program. whenever user clicks "start" in player.java, terminates previous chatter thread , build new thread start. chatter thread has gui chatting.
i terminate chatter thread interrupt() method. thought set flag in chatter thread terminated checking isinterrupted() false. supposed true when phone call interrupt() in player.java
here code: player.java
public class player implements gameconstants{ /** * listener used when user clicks quit in gui. */ private class controllistener implements actionlistener{ /** * method sends quit server when listener triggered. * @param e actionevent */ @override public void actionperformed(actionevent e){ string cmd = ((jbutton)(e.getsource())).gettext(); if ("start".equals(cmd)) { //i interrupt thread using if (chatthread !=null) { system.err.println("before interruped"); chatthread.interrupt(); } chatthread = new chatter(ip,sendername); chatthread.start(); } } } } here chatter.java
public class chatter extends thread implements gameconstants{ private jtextarea log; private string sendername; private datainputstream fromserver; private dataoutputstream toserver; private jtextfield inputfield; private soundplayer msgsound; private socket socket; private class sendlistener implements actionlistener{ @override public void actionperformed(actionevent e){ string msg = inputfield.gettext(); inputfield.settext(""); seek { toserver.writeutf(""+(new date())+ "\n" + sendername + ": "+msg); toserver.flush(); } catch(ioexception ex) { system.err.println(ex.getmessage()); } } } public chatter(string ip, string sendername){ this.sendername = sendername; buildgui(); try{ socket = new socket(ip,chat_port); fromserver = new datainputstream(socket.getinputstream()); toserver = new dataoutputstream(socket.getoutputstream()); }catch(ioexception e){ system.out.println(e.getmessage()); } } @override public void run(){ seek { while(!isinterrupted()){ string msg = fromserver.readutf(); report(msg); } } catch(ioexception e) { system.err.println(e.getmessage()); }finally{ seek { socket.close(); } catch(exception e) { } } } private void buildgui(){ jframe frame = new jframe(); frame.setsize(width,height); frame.settitle("chat room - " + sendername); frame.setresizable(false); // .... building gui frame.add(parentpanel); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true); } }
when interrupt thread, may throw interruptedexception if it's waiting io operations or that. interrupted flag cleared after exception thrown , false again.
java multithreading
Comments
Post a Comment