I am trying to make an action listener for a button to send a message from a server to client and vice versa, but I can't access the bufferedwriter variable from the thread, so I can't send a message. How can I access the variables from the thread? I am quite new to java, so I don't know a lot about it. Sorry if it was an obvious question.
Code(only the client):
package com.mpemessenger;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;
import java.util.concurrent.TimeUnit;
public class GUIClient extends JFrame {
private JTextField messageField;
private JButton sendButton;
private JTextArea messageArea;
private JScrollPane scroll;
private JPanel All;
public GUIClient() {
add(All);
setTitle("MPE Messenger");
setSize(400, 500);
scroll.setAutoscrolls(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
messageArea.setEditable(false);
All.getRootPane().setDefaultButton(sendButton);
Thread thread = new Thread() {
public void run() {
int loop = 1;
Socket socket = null;
InputStreamReader inputStreamReader = null;
OutputStreamWriter outputStreamWriter = null;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
socket = new Socket("localhost", 6969);
inputStreamReader = new InputStreamReader(socket.getInputStream());
outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
bufferedReader = new BufferedReader(inputStreamReader);
bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write("Connected!!!");
while (loop == 1) {
messageArea.append("Server:" + bufferedReader.readLine() + "\n");
String messageFromClient = bufferedReader.readLine();
messageArea.append("Server:" + messageFromClient + "\n");
loop = 2;
}
while(loop == 2) {
TimeUnit.SECONDS.sleep(1);
loop = 1;
}
} catch (IOException | InterruptedException ioException) {
ioException.printStackTrace();
}
}
};
thread.start();
BufferedWriter finalBufferedWriter = bufferedWriter;
finalBufferedWriter = new BufferedWriter(outputStreamWriter);
BufferedWriter finalBufferedWriter1 = finalBufferedWriter;
sendButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
finalBufferedWriter1.write(messageField.getText());
finalBufferedWriter1.newLine();
finalBufferedWriter1.flush();
messageField.setText("");
}
});
}
}