我正在做一个关于使用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;
}