【发布时间】:2015-05-02 09:53:07
【问题描述】:
我添加了一个 ActionListener,它创建了一个可以从服务器发送和接收消息的新聊天 JFrame。这是 ActionPerformed() 方法中的代码
BananaChat chat = new BananaChat(name, password, IP, port, status);
try {
chat.chatting();
} catch (Exception e) {
showInfo("fail");
}
所以它创建了一个新的聊天框架,如果我没有调用chat.chatting()方法,我可以正常向服务器发送消息,但无法接收来自服务器的消息。所以我必须调用这个方法,因为如果它确实发送了消息,我需要继续监听来自服务器的消息。
这里是chatting()的代码
String line = null;
try {
while ((line = in.readLine()) != null) {
if (line.equals("your user name is already registered") || line.equals("user name doesn't exist") || line.equals("wrong password")) {
showMessage(line);
break;
}
showMessage(line);
}
} catch (IOException e) {
showMessage("can not receive the message");
}
这是while循环。 如果我创建我的聊天框并在 main 方法中调用此方法,它可以工作,但如果我在 ActionListener 中创建聊天框,它就会卡住。似乎 ActionListener 不能有一个根本没有结束的 while 循环。
不知道怎么解决,有没有更好的方法从登录界面新建聊天界面?
【问题讨论】:
-
1) 请参阅The Use of Multiple JFrames, Good/Bad Practice? 2) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
-
不要在事件调度线程中运行阻塞代码。您需要在后台线程中运行此类代码 - 通常使用SwingWorker 最方便。
-
您能否在问题中添加更多代码,例如
BananaChat类?这将使更具体的建议成为可能。
标签: java swing jbutton chat actionlistener