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-static 和 handleInputStream()
方法是 static。我尝试了一些方法,但 none 有效:
- 将
textAreaMessages;
更改为 private static JTextArea textAreaMessages;
=> 我的 IDE (IntelliJ IDEA) 在我 运行 程序
- 将
handleInputStream()
更改为 非静态 方法 => 这也不起作用,因为我从静态上下文中调用了此方法,这不可能改变了。
那么有什么解决这个问题的想法吗?
非常感谢!
您可以为私有 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");
}
我正在做一个关于使用 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-static 和 handleInputStream()
方法是 static。我尝试了一些方法,但 none 有效:
- 将
textAreaMessages;
更改为private static JTextArea textAreaMessages;
=> 我的 IDE (IntelliJ IDEA) 在我 运行 程序 - 将
handleInputStream()
更改为 非静态 方法 => 这也不起作用,因为我从静态上下文中调用了此方法,这不可能改变了。
那么有什么解决这个问题的想法吗?
非常感谢!
您可以为私有 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");
}