gpt4 book ai didi

java - 为什么来自多个套接字的输入无法正确更新 UI?

转载 作者:行者123 更新时间:2023-12-01 10:16:52 25 4
gpt4 key购买 nike

笔记本代码:http://pastebin.com/hNgjr4QY ,服务器代码:http://pastebin.com/J5hnz2mu

我最感兴趣的是代码的笔记本部分:

private class ClientHandler implements Runnable
{
public void run()
{
String message = null;

try {
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while ((message = bufferedReader.readLine()) != null)
{
if (!message.equals(""))
{
textArea.setText(message);
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}

public void run()
{
String message = null;

try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while ((message = bufferedReader.readLine()) != null)
{
for (ComputerConnections ccc: comCon)
{
ccc.printWriter.println(message);
ccc.printWriter.flush();
}
}
bufferedReader.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

嗯,程序的重点是允许尽可能多的用户连接,并且在他们都可以在同一个记事本中写入之后,程序应该相应地更新它,嗯,看起来它的行为很奇怪。起初它更新得很好,但后来它突然停止了,并且每隔几次按键就会工作!

最佳答案

我怀疑这是一个 UI 问题,而不是您所描述的套接字问题(尽管此代码还存在其他问题)。这很容易弄清楚,只需放置一些 System.out.println() 调试行而不是 UI 写入。

如果是这种情况,您应该使用 EDT 线程,以便对 GUI 进行更改,以便唯一对 GUI 进行更改的线程是那个线程,以避免干扰,就像这样

    SwingUtilities.invokeLater( 
new Runnable() {
public void run() {
textArea.setText(message);
}
}
);

众所周知,UI 很难实现多线程,因此解决此问题的最佳方法是将由一个 UI 线程处理的更新排队(在 Java 中为 EDT - Event Dispatch Thread )。

关于java - 为什么来自多个套接字的输入无法正确更新 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35843113/

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