如何从另一个客户端或服务器将文本添加到列表中?

How to add a Text into a List from another Client or Server?

我正在尝试编写自己的聊天程序,但我无法将文本从一个客户端发送到另一个客户端。我将聊天列为列表,但无法添加。如果您知道如何解决它或有可行的想法,我很乐意听到。

public class SendAction implements ActionListener {

    private JButton sendButton;
    private JButton sendButtonServer;
    private JTextField text;
    private JLabel label;
    static ArrayList<String> textList = new ArrayList<String>();
    static ArrayList<String> textListServer = new ArrayList<String>();
    private String chatText;

    public SendAction(JButton sendButton) {
        this.sendButton = sendButton;
        this.sendButtonServer = sendButtonServer;
    }

    public SendAction(JTextField text) {
        this.text = text;
    }

    public SendAction(JLabel label) {
        this.label = label;
    }

    public void actionPerformed(ActionEvent e) {
        String action = e.getActionCommand();

        if (e.getSource() == P2PChatClient.sendButton) {
            if (P2PChatClient.text.getText().equals("")) {
            } else {
                textList.add("Client: " + P2PChatClient.text.getText());
                System.out.println("Eingegebene ArrayList Elements: "
                        + textList);
                chatText = String.join("  |  ", textList);
                P2PChatClient.label.setText(chatText);

                P2PChatClient.text.setText(null);
            }
        }

        if (e.getSource() == P2PChatServer.sendButtonServer) {
            if (P2PChatServer.textServer.getText().equals("")) {
            } else {
                textListServer.add("Server: "
                        + P2PChatServer.textServer.getText());
                System.out.println("Eingegebene ArrayList Elements: "
                        + textListServer);
                chatText = String.join("  |  ", textListServer);
                P2PChatServer.labelServer.setText(chatText);

                P2PChatServer.textServer.setText(null);
            }
        }
    }
}

另一个Class:

public class ChatServerSocket extends Thread {
    private int port;
    private P2PChatServer serverGUI;
    private DataInputStream inStream;
    private DataOutputStream outStream;

    public ChatServerSocket(int port, P2PChatServer serverGUI) {
        this.port = port;
        this.serverGUI = serverGUI;
    }

    public void run() {
        ServerSocket server = null;
        try {
            server = new ServerSocket(port);
        } catch (Exception e) {
            System.out.println("Fehler: " + e.toString());
        }
        Socket client;

        while (true) {
            try {
                client = server.accept();

                InputStream in = client.getInputStream();
                OutputStream out = client.getOutputStream();
                inStream = new DataInputStream(in);
                outStream = new DataOutputStream(out);

                while (true) {
                    String utf = inStream.readUTF();

                    // File file = new File(utf);
                    // if (file.isFile()) {
                    // file.delete();
                    // }

                    SendAction.textListServer.add(utf);

                    // serverGUI.setMessage(utf);
                }
            } catch (IOException ioe) {
                System.out.println("Server Fehler: " + ioe.toString());
            }
        }
    }

    public void sendText(String message) {
        // P2PChatServer.send();
        try {
            if (message != null) {
                outStream.writeUTF(message);
            }
        } catch (IOException ioe) {
            System.out.println("Fehler beim senden im Server: "
                    + ioe.toString());
        } catch (NullPointerException npe) {
            System.out.println("Fehler beim senden im Client: "
                    + npe.toString());
        }
    }
}

还有一个:

public class ChatClientSocket extends Thread {
    private String ip;
    private int port;
    private P2PChatClient client;
    private DataInputStream inStream;
    private DataOutputStream outStream;

    public ChatClientSocket(String ip, int port, P2PChatClient client) {
        this.port = port;
        this.ip = ip;
        this.client = client;
    }

    public void run() {
        try {
            Socket clientSocket = new Socket(ip, port);

            InputStream in = clientSocket.getInputStream();
            OutputStream out = clientSocket.getOutputStream();

            inStream = new DataInputStream(in);
            outStream = new DataOutputStream(out);

            while (true) {
                String utf = inStream.readUTF();

                SendAction.textList.add(utf);

                // client.setMessage(utf);
            }
        } catch (UnknownHostException uhe) {
            System.out.println("Client Fehler: " + uhe.toString());
        } catch (IOException ioe) {
            System.out.println("Client Fehler: " + ioe.toString());
        }
    }

    public void sendText(String message) {
        try {
            if (message != null) {
                outStream.writeUTF(message);
            }
        } catch (IOException ioe) {
            System.out.println("Fehler beim senden im Client: "
                    + ioe.toString());
        } catch (NullPointerException npe) {
            System.out.println("Fehler beim senden im Client: "
                    + npe.toString());
        }
    }
}

我使用了文本区域。 使用 setEditable 你不能编辑它,而 scrollArea 让它可以滚动你知道。

textArea.setEditable(false);
        scrollArea = new JScrollPane(textArea);