I am making a simple chat GUI and I have written both a server and GUI client and I can send a message from the client GUI to the server.
My problem is with receiving message from a server on frame.
When I use an infinite loop the frame is locked. I don’t know how I should split the thing to get any message displayed on JTextArea.
My question is:
Is there any way to split frame to handle the ‘send’ and ‘receive’ information from a server?
My GUI consists of a JTextField, JTextArea and JButton.
When press the JButton the text from JTextField is sent to the server by:
String u = jTextField.getText();
out.writeUTF(u);
But I don’t know what I should do to get JTextArea lessen all time for coming information by:
msg = in.readUTF();
jta.append(msg + "\n");
//
Should the thread be a class or component in GUI class because i have made thread evrything seems to be working but massage don’t apear on jTextField. I made thread like in server I did in same file but is not working:
class bacgroundTask extends Thread{
static String msg;
static JTextArea jta;
static DataInputStream in;
public void run(){
while(true){
try{
msg = in.readUTF();
jta.append(msg + "\n");
}
catch(IOException ioe){}}}}
//
Hi it’s again me i try use the invokelater method but the frame frezze when is executed i can’t clik send button or type in text in jtextfield. Could any body explain me a bit more about them methods and are they right in my case.
I have tried with and without while stetment.
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
while(true){
try{
msg = in.readUTF();
jta.append(msg + "\n");
jta.revalidate();
}
catch(IOException ioe){
}}}});
You need to run an infinite receive loop on a background thread.