gpt4 book ai didi

java - 客户端-服务器 Java GUI : read/write causing program to freeze

转载 作者:行者123 更新时间:2023-11-29 03:26:48 26 4
gpt4 key购买 nike

我正在用 Java(包括 GUI)编写客户端/服务器程序。我在客户端中有以下代码:

public class SBListener implements ActionListener{
public void actionPerformed(ActionEvent e){
try{
outToServer.writeUTF(usn.getText().trim());
System.out.println("sent username to server");
playerExists = inToClient.readBoolean();
System.out.println("past getting player");
System.out.println("player exists = " + playerExists);
}catch(IOException a){
System.err.println(a);
}
if(playerExists == false){
JButton submitInfo = new JButton("submit info");
submitInfo.addActionListener(new SBNewInfoListener());
init.add(new JLabel(""));//dummy element to get the right alignment
init.add(new JLabel("First Name:"));
init.add(fn);
init.add(new JLabel("Last Name:"));
init.add(ln);
init.add(submitInfo);
add(init, BorderLayout.WEST);
init.setVisible(true);
init.revalidate();
init.repaint();
}

}

以及服务器中的以下代码:

String username = inp.readUTF();
System.out.println(username);
out.writeBoolean(false);

System.out.println("wrote boolean, waiting for fn/ln/un");
fn = inp.readUTF();
System.out.println("got fn");
ln = inp.readUTF();
un = inp.readUTF();

但是当调用 SBListener 的按钮被点击时,程序在到达 Server 正在等待 fn/ln/username 的点时卡住。我添加了一堆用于调试的 system.out 语句,然后我开始写“写 boolean 值,等待 fn/ln/un”。

基本上,我试图在服务器返回错误值后更新屏幕。具体来说,我想为名字和姓氏添加两个文本字段。然后我想将这些值发送到服务器。

谁能告诉我如何解决这个问题?在此先感谢您的帮助!

最佳答案

不要在 ActionListener 中执行客户端/服务器代码。这将导致事件调度线程在等待服务器响应时阻塞。当 EDT 被阻止时,整个 GUI 会卡住。

阅读 Concurrency 上的 Swing 教程部分了解更多信息。您需要为客户端/服务器代码使用单独的线程。或者您可以使用教程中讨论的 SwingWorker

关于java - 客户端-服务器 Java GUI : read/write causing program to freeze,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20619873/

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