如何从另一个线程访问变量

时间:2021-07-26 08:13:53

标签: java sockets actionlistener java-threads bufferedwriter

我正在尝试为按钮创建一个动作侦听器,以便从服务器向客户端发送消息,反之亦然,但我无法从线程访问 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("");
            }
        });
    }
        }

0 个答案:

没有答案