0

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("");
            }
        });
    }
        }
  • Does this answer your question? [Accessing a variable of a thread from another thread in java](https://stackoverflow.com/questions/17756255/accessing-a-variable-of-a-thread-from-another-thread-in-java) – Elikill58 Jul 26 '21 at 08:16
  • Also, [this](https://stackoverflow.com/questions/17870314/how-do-i-access-variables-from-a-different-thread) may help you (even if it's in c#) – Elikill58 Jul 26 '21 at 08:17

0 Answers0