用户界面-Java GUI-如何从静态方法将文本附加到JTextArea



我正在做一个关于使用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变量,因为它是非静态,而handleInputStream()方法是static。我试过一些方法,但都不起作用:

  • textAreaMessages;更改为private static JTextArea textAreaMessages;=>运行程序时,我的IDE(IntelliJ IDEA(会产生错误
  • handleInputStream()更改为非静态方法=>这也不起作用,因为我从静态上下文调用此方法,无法更改

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

非常感谢!

相当难看,但如果您确定只有一个对象实例,则修改(或添加(构造函数以将静态变量设置为this:

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

您可以为私有JTextArea textAreaMessages;创建getter和setter,在调用handleInputStream((时传递该类的实例并调用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;
}

相关内容

  • 没有找到相关文章

最新更新