Reputation: 1285
I am trying to make a simple TCP client and host chat program in java. They are both running in simple GUIs. After I start my server, it waits for a connection from the client then prints out a message in its JtextArea. The server does this succesfully, everything run fines until here, now I send some data to the client which it is supposed to print on its JtextArea, but the client is stuck from the time the connection was made, the connect button stays pressed and it just freezes.
here is the client connect button code, I think I am doing something wrong here
private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
serverName = t3.getText();
serverPort = Integer.parseInt(t4.getText());
try {
tb.append("\nconnecting...>\n"+temp);
connect2Server();
temp = in.readLine();
tb.append(temp);
} catch (IOException ex) {
tb.append(ex.toString());
Logger.getLogger(DesktopApplication1View.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void connect2Server() throws IOException{
try{
skt = new Socket(serverName,serverPort);
in = new BufferedReader(new
InputStreamReader(skt.getInputStream()));
}
catch(UnknownHostException uh){
tb.append(uh.toString());
}
catch(IOException io){
tb.append(io.toString());
}
}
//vars
BufferedReader in;
Socket skt;
Upvotes: 1
Views: 125
Reputation: 39495
The reason why your connect button remains pressed is that you are blocking your painting thread. Take a look at the concurrency in Swing tutorial. The gist is that all GUI events in Swing are published in the painting thread, and if you want to do any blocking task (ie server calls) or any other long running process, you should break your process up into separate tasks. All tasks that perform or trigger painting the GUI should be done via the painting thread. Long running tasks should be done in background threads. The SwingWorker
is one construct that Java provides for this sort of design.
Currently, your jButton2MouseClicked
method is being run in the painting thread, and will not allow your app to continue to paint, including the unfreezing of your connect button, until your server call is complete.
Upvotes: 3