gpt4 book ai didi

java - 被动监听聊天应用程序的套接字

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:50 24 4
gpt4 key购买 nike

我目前正在开发一个总体上非常基础的聊天应用程序,但是我在从客户端和服务器端接收字符串时遇到了问题。我正在使用一个线程在套接字上被动地监听传入消息,这就是我怀疑的问题所在。我这样做的方式正确吗?

来源:发送字符串代码:

send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
messageBuffer = message.getText();
out.println(messageBuffer);
chat.append(username + ": " + messageBuffer + "\n");
message.setText("");
}
});

然后我有这个被动监听(问题可能出在这里):

public void run(){
while(true){
try {
messageBufferIn = in.readLine();
System.out.println(in.readLine());
chat.append(recipient + ": " + messageBufferIn + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}

我也用这个调用线程:

public static void startChatting(){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}

感谢您提供的任何帮助,我对线程总体来说还是新手,所以我的错误可能很一般。

编辑:问题是当我尝试向接收者发送消息时,没有任何消息通过,我可以确认它们已连接。事实上 System.out.println(in.readLine());根本没有通过,甚至没有“空”输出。

最佳答案

  1. 您遇到了 Concurency in Swing 问题,Swing GUI 不知道您在 后台任务 上运行/打开 Socket

    <
  2. Swing GUI 的所有更新都必须在 EDT 上完成,否则什么也不会发生,或者您会遇到一些异常

  3. 必须将所有更新从后台任务(在您的情况下为Runnable#Thread)包装到invokeLater for Swing GUI

  4. while(true){ 是无限循环,把 Boolean variable 而不是 true,然后你可以停止,开始或根据您的情况重新启动 Socket

  5. send.addActionListener(new ActionListener(){ 仅运行一次的情况下(如果用户通过 JButtons 单击调用)则使用 SwingWoker打开 Socket,SwingWorker 很好的保证了所有的输出都应该在 EDT 上完成

  6. Runnable#ThreadSwingWorker 的区别在于 SwingWorker 被指定为只运行一次

    <

关于java - 被动监听聊天应用程序的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com