我正在尝试为按钮创建一个动作侦听器,以便从服务器向客户端发送消息,反之亦然,但我无法从线程访问 bufferedwriter 变量,因此我无法发送消息。如何从线程访问变量?我对java很陌生,所以我对它了解不多。对不起,如果这是一个明显的问题。
代码(仅客户端):
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("");
}
});
}
}