Klient aplikacji, problem z wątkiem może mi ktoś wreszcie pomóc?

0

Witam. Mam taki kod klienta w Javie(to będzie prosty chat Klient-Serwer).

 import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import java.util.Scanner;
import javax.swing.*;

public class Client extends JFrame implements ActionListener
{
    JButton sendB;
    JTextField textField;
    JTextArea messageBox;

    public Client() {
        setSize(750, 700);
        setResizable(false);
        setTitle("Chat client");
        setLayout(null);

        try {
            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Black".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) {

        }

        //JButton       WYSYLANIE WIADOMOSCI
        sendB = new JButton("Wyślij");
        sendB.setBounds(613, 597, 120, 35);
        add(sendB);
        sendB.addActionListener(this);

        //JtextField    POLE TEXTOWE
        textField = new JTextField();
        textField.setBounds(215, 597, 400, 36);
        add(textField);
        textField.addActionListener(this);

        //JTextArea     WIADOMOSCI
        messageBox = new JTextArea();
        messageBox.setBounds(215, 70, 516, 500);
        add(messageBox);

        //Skrol na wiadomości
        JScrollPane skrol = new JScrollPane(messageBox);
        skrol.setBounds(215, 70, 516, 500);
        add(skrol);

    }

    public static void main(String[] args) throws IOException {
        Client window = new Client();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();
        String message;

            class SendingMessages extends Thread {

                if(source == sendB)
                {
                    try {
                        Socket socket = new Socket("127.0.0.1", 3001);
                        DataOutputStream messageOut = new DataOutputStream(socket.getOutputStream());
                        messageOut.writeUTF(message = (textField.getText()));

                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }

                }

            }

    }
}

Coś jest źle z IF'em w ActionListenerze? Przed dodaniem go do wątku było dobrze, a po dodaniu jest podkreślony na czerwono. W jakiej klasie mam umieszczać wątki i czy wszystko co jest związane z JButtonem i JTextFieldem (czyli np. że pi naciśnięciu przycisku ma wziąć tekst z pola tekstowego i wysłać go na serwer) mam dawać w ActionListenerze?
I jeszcze jak zrobić aby w JTextArea wyświetlały się przychodzące wiadomości bo z tego co wiem nie można JTextArea dać w ActionListenera.

0

Klasy wewtnętrzne pola finalne, używasz IDE Eclipse, Netbeans to Ci powie o co chodzi. Najprościej wydziel klasę SendingMessages do osobnego pliku to zobaczysz o co chodzi

0

A jak zrobić aby w JTextArea wyświetlały się przychodzące wiadomości bo z tego co wiem nie można JTextArea dać w ActionListenera.

0

A, i jeszcze jedno. Co trzeba zrobić aby serwer rozpoznawał od którego klienta dostał wiadomość i do którego ma wysłać (klient-serwer na socketach)?

1 użytkowników online, w tym zalogowanych: 0, gości: 1