Java GUI - 如何从静态方法将文本附加到 JTextArea?

Java GUI - How to append text to JTextArea from a static method?

我正在做一个关于使用 Java IO 进行客户端-服务器聊天的简单练习。这是我的代码结构:

public class ChatRoomClientGUI{
    private JTextArea textAreaMessages;
    private JTextField textFieldMessage;
    private JButton buttonSendMsg;
    //...
    private static Socket socket = null;
    private static Scanner input = null;
    private static PrintWriter output = null;
    //...
    private static void handleInputStream(){
        String response = input.nextLine();
        textAreaMessages.append(response + "\n"); // Error here
    }
}

我现在面临的问题是我无法访问 textAreaMessages 变量,因为它是 non-statichandleInputStream() 方法是 static。我尝试了一些方法,但 none 有效:

那么有什么解决这个问题的想法吗?

非常感谢!

您可以为私有 JTextArea textAreaMessages; 创建 getter 和 setter,并在调用 handleInputStream() 时传递此 class 的实例并调用 setter 附加文本。

private static void handleInputStream(ChatRoomClientGUI gui) {
    String response = input.nextLine();
    gui.getTextField().append(response + "\n"); // Error here
}

public void setTextField(JTextField textField) {
    this.textAreaMessages = textField;
}

public JTextField getTextField() {
    return textAreaMessages;
}

相当丑陋,但是如果你确定你的对象只有一个实例,那么修改(或添加)构造函数以将静态变量设置为this:

private static ChatRoomClientGUI singleton;
...
public ChatRoomClientGUI() {
    singleton = this;
    ...
}

private static void handleInputStream(){
    String response = input.nextLine();
    singleton.textAreaMessages.append(response + "\n");
}