java - JButton freezes when sending string from server -
i new java , trying create simple game accepts structured english commands, parses them , displays them on grid. lan game , commands need sent other computer parsed , displayed.
i have finished , written parsing code, , client/server code, stuck gui , interaction server , client. right gui accepts string input, , sends no issues, when want send second string, button has greyed out , cant write else.
gui code:
public class serverplayergamemain extends javax.swing.jframe implements runnable { private gridgenerator gg = new gridgenerator(10,10); public serverplayerparsing serverpc = new serverplayerparsing(); public studentserver serversend = new studentserver(); thread run; public serverplayergamemain() { initcomponents(); run = new thread(this); run.start(); } public void run(){ gg.framegen(); } @suppresswarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="generated code"> private void initcomponents() { command = new javax.swing.jtextfield(); jlabel1 = new javax.swing.jlabel(); jtogglebutton1 = new javax.swing.jtogglebutton(); setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close); command.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { commandactionperformed(evt); } }); command.addkeylistener(new java.awt.event.keyadapter() { public void keypressed(java.awt.event.keyevent evt) { commandkeypressed(evt); } }); jlabel1.settext("enter command:"); jtogglebutton1.settext("add"); jtogglebutton1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jtogglebutton1actionperformed(evt); } }); javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane()); getcontentpane().setlayout(layout); layout.sethorizontalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(layout.createsequentialgroup() .addgap(29, 29, 29) .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addcomponent(jlabel1) .addgroup(layout.createsequentialgroup() .addcomponent(command, javax.swing.grouplayout.preferred_size, 204, javax.swing.grouplayout.preferred_size) .addgap(18, 18, 18) .addcomponent(jtogglebutton1, javax.swing.grouplayout.preferred_size, 76, javax.swing.grouplayout.preferred_size))) .addcontainergap(27, short.max_value)) ); layout.setverticalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(layout.createsequentialgroup() .addcontainergap(180, short.max_value) .addcomponent(jlabel1) .addpreferredgap(javax.swing.layoutstyle.componentplacement.related) .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline) .addcomponent(command, javax.swing.grouplayout.preferred_size, 42, javax.swing.grouplayout.preferred_size) .addcomponent(jtogglebutton1)) .addgap(58, 58, 58)) ); pack(); } private void jtogglebutton1actionperformed(java.awt.event.actionevent evt) { serverpc.validate(command.gettext()); string commandmessage = command.gettext(); serversend.run(commandmessage); } // variables declaration - not modify private javax.swing.jtextfield command; private javax.swing.jlabel jlabel1; private javax.swing.jtogglebutton jtogglebutton1; // end of variables declaration } server code:
import java.awt.point; import javax.swing.*; import javax.swing.event.listselectionevent; import javax.swing.event.listselectionlistener; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class studentserver{ static serversocket serversocket; static socket socket; static printwriter printwriter; static bufferedreader bufferedreader; static thread thread; console console = new console(); public serverplayergamemain gm; public static void main(string args[]) throws exception{ } public void run(string commandmessage){ while(true){ try{ printwriter.println(commandmessage+"\n"); string input = bufferedreader.readline();//reads input textfield console.readline("client message: "+input);//append textarea }catch(exception e){} } } public void serverstartactionperformed() { system.out.println("server has started!"); try{ serversocket = new serversocket (8888); // socket server socket = serversocket.accept(); // waiting socket accept client joptionpane.showmessagedialog(null, "your opponent has connected!", "opponent connection!", joptionpane.information_message); gm = new serverplayergamemain(); gm.setvisible(true); bufferedreader = new bufferedreader(new inputstreamreader(socket.getinputstream())); // reads line input streamer printwriter = new printwriter(socket.getoutputstream(),true); }catch(ioexception | headlessexception e){ system.out.println("server not running!"); //print message if server not running } } } client code:
import java.io.*; import java.net.*; import javax.swing.joptionpane; public class studentclient { static socket socket; static printwriter printwriter; static bufferedreader bufferedreader; static thread thread; public clientplayergamemain gm; public void clients(string address) { try{ socket=new socket("localhost",8888);//socket client //below line reads input inputstreamreader bufferedreader=new bufferedreader(new inputstreamreader(socket.getinputstream())); //below line writes output outputstream printwriter=new printwriter(socket.getoutputstream(),true); joptionpane.showmessagedialog(null, "connected server successfully", "success", joptionpane.information_message); gm = new clientplayergamemain(); gm.setvisible(true); system.out.println("connected");//debug code }catch(exception e){ joptionpane.showmessagedialog(null, "no connection server", "error", joptionpane.error_message); system.out.println("not connected"); } thread = new thread(); thread.start(); } public static void run(string commandmessage){ while(true){ try{ console console = new console(); printwriter.println(commandmessage); string input = bufferedreader.readline(); system.out.println("from server:" +input); }catch(exception e) {} } } } there classes have left out grid generator has no effect on function of server/client , how interact.
please explain happening button, , why stops working after sending 1 string, , how can solve this.
call
run = new thread(this); run.start(); in
private void jtogglebutton1actionperformed(java.awt.event.actionevent evt) { run = new thread(this); run.start(); } and run method should be:
public void run(){ gg.framegen(); //... serverpc.validate(command.gettext()); string commandmessage = command.gettext(); serversend.run(commandmessage); }
Comments
Post a Comment