I'm trying to take some of the socket examples a step further and make it into a very basic Java chat server with a GUI. Everything seems to be working fine except for the fact that I'm not sure how to broadcast messages to every user. Here's what I have so far:

A Server project which contains four classes:

A Main class which literally just creates the GUI object and runs it.
A Frame class which creates all the GUI features and handles events.
A Server class which handles the running of the server and connections to it
A Client thread class which gives each new connected client its own thread and runs it.

As nothing much to do with the client happens prior to this I'll start with the Swing Worker which waits for a client and when a connection has been accepted it begins a new thread. This code looks like this:

Code:
public SwingWorker<Socket, Void> worker = new SwingWorker<Socket, Void>() {
        protected Socket doInBackground() throws Exception {
            // Create client socket
            try {
                while (!stopRequested) {
                    // Wait for client connection and start a new thread
                    clientSocket = serverSocket.accept();
                    
                    feedbackTextArea.append("Found Connection\n");
                    Thread clientThread = new HandlerThread(clientSocket);
                    clientThread.start();
                }
            }
            catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Socket Acception Failed", "Client Socket Error",
                        JOptionPane.ERROR_MESSAGE);
                System.out.println(e.getMessage());
            }

            return clientSocket;
        }

        @Override
        public void done() {
            try {
                feedbackTextArea.append("Closing Server...\n");
                clientSocket.close();
                serverSocket.close();
                System.out.println("Swing Worker finished");
            }
            catch (Exception e) {
                System.out.println(e.getMessage());
            }
            finally {
                feedbackTextArea.append("Server has been Stopped\n\n");
            }
        }
    };
Oh I should probably mention the feedbackTextArea object points to a JTextArea which is used purely for outputting messages to the user.

At the moment the Thread class currently looks like the code below, and I'm ashamed to say I'm stuck as to what I do next as I know the usual input output is not going to be the same if I'm sending messages to every thread.

Code:
public class HandlerThread extends Thread {
    Socket clientSocket;
    BufferedReader input;
    PrintWriter output;

    String outputText;
    String inputText;

    public HandlerThread(Socket clientSocket) {
        this.clientSocket = clientSocket;

        try {
            input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            output = new PrintWriter(clientSocket.getOutputStream(), true);
        }
        catch (IOException e) {
            JOptionPane.showMessageDialog(null, "Could not get client input buffer", "Input Stream Error",
                    JOptionPane.ERROR_MESSAGE);
            System.out.println(e.getMessage());
        }
    }

    @Override
    public void run() {
        output.println("Welcome to Communicator");

        try {
            while ((inputText = input.readLine()) != null) {
                
            }
        }
        catch (IOException e) {

        }
    }
}
I'd appreciate any help given. Thanks