客户端-服务器 Java GUI:读/写导致程序冻结

2023-12-01

我正在用 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 的按钮时,程序会在到达服务器等待 fn/ln/username 的位置时冻结。我添加了一堆 system.out 语句进行调试,然后我得到了一条“写了布尔值,等待 fn/ln/un”的语句。

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

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


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

客户端-服务器 Java GUI:读/写导致程序冻结 的相关文章

随机推荐

  • 如何停止“setInterval”[重复]

    这个问题在这里已经有答案了 我该如何停止和开始setInterval 假设我有一个textarea 我想停下来setInterval聚焦并重新启动setInterval模糊 使用 jQuery 你必须存储timer id启动它时的时间间隔
  • 在 SwiftUI 中一一叠加视图

    我有以下带有一个结构和两个视图的代码 点击第一个屏幕覆盖按钮时 我想显示第二个屏幕覆盖并隐藏前一个 依此类推 任何帮助表示赞赏 import SwiftUI struct ContentView View var body some Vie
  • 将向量转换为具有多列的数据框

    我有一个向量 如下所示 99 Hershey 6 7 B 7 4 7 B 562 M Consumer Packaged Goods 100 Costco 6 7 B 14 117 3 B Retail 为了简单起见 我只提到了 700 个
  • 为静态Web应用程序购买域名

    I have deployed a static web application Gatsby now I want purchase a domain If the web was deployed to Azure App Servic
  • 如何选择/取消选择所有复选框?

    我有一个带有图像视图 文本视图和复选框的适配器 以及用于选择所有复选框的 全选 按钮 我搜索了很多关于如何执行此操作 选择所有复选框 的信息 但它不起作用 谁能解释更多我应该做什么 拜托 我必须做这件事紧急 这是我的适配器 Public c
  • 将 SQL 转换为 HQL [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在尝试将以下 SQL 查询转换为 HQL 但遇到了一些问题 逐行直线转换不起作用 我想知道是否应该在 HQL 中使用 Inner Join SELECT UNIX TIMESTAMP cos
  • 为什么在安装 .NET Core 2.1.3 时出现 HTTP 错误 502.5

    我为运行 Windows Server 2016 的新计算机安装了 NET Core 版本 2 1 3 我将其托管在 IIS 10 中 但它给了我错误 502 HTTP 错误 502 5 进程失败 此问题的常见原因 申请进程无法启动 申请流
  • TYPO3 StoragePid 和当前

    我构建了一个简单的注释 extbase 扩展 我想将其与打字稿一起包含在项目扩展 也是 extbase 中 项目扩展中的流畅代码如下所示
  • UITableViewCell 重用良好实践

    UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath static NSString CellIdentifi
  • React.js 中刷新时丢失 useState 值

    我正在发送一个id from ProductListing组件 我收到了id using useParams in ProductDetail成分 在ProductDetail组件我正在使用 find 方法查找一个对象 然后将其设置为sin
  • 如何测量图像中的环境光水平?

    我正在考虑制作一个应用程序 使用相机来测量拍摄图像时存在的光量 一些条件行为会根据存在的光线量而发生 即 如果看起来很黑 则显示一条消息 看起来像睡觉时间 我知道这对于由于曝光等原因而存在的实际光量来说是一个相当糟糕的测量 但它不需要非常准
  • ReactJS - 使用重定向组件传递道具

    你应该如何传递 propsRedirect组件而不将它们暴露在 url 中 像这样
  • SFU 的特殊 CUDA 双精度三角函数

    我想知道我将如何使用 cos x 和分别 sin x 在带有 CUDA 的内核代码中 我在 CUDA 手册中查找到有这样一个设备函数 但是当我实现它时 编译器只是说我无法调用设备中的主机函数 然而我发现有两个姐妹函数cosf x and c
  • Nodejs多列独特mongoose的组合

    客观的 为两列创建唯一性 我尝试了什么 这是我的架构 var mongoose require mongoose location table Schema var locationSchema new mongoose Schema lo
  • Leaflet GeoJSON 是否可以在到达目的地之前裁剪线要素?

    有没有一种简单的方法可以缩短 GeoJSON 图层上的线条 我有一条线 它从 A 点到 B 点 我希望这条线在标记的半径附近停止 那可能吗 有点像从线路终点 起点的偏移量 这是一个例子 我有 50 x 50 的图标 但半透明 参见图片 并且
  • getIntent.getExtras.getString() 中的 null 值

    这是我在第一个活动中的代码 Intent i new Intent this OtherScreen class i putExtra id1 first i putExtra id2 second startActivity i 其中第一
  • 使用仅具有 id 值的实体保存外键

    如果我有两个休眠实体 例如 Entity class Company Id Integer id String name Entity class Person Integer id String name ManyToOne Compan
  • C++ 中的静态构造函数和致命错误 LNK1120: 1 无法解析的外部

    首先 我可能应该让你知道我绝不是一名程序员 我只是为了一项家庭作业而这样做 所以如果可能的话 我将需要一个非常详细的解释 我目前有一个 Node 类 用于存储点的坐标 除此之外 我想要用它做的是根据计数器为每个不同的 Node 对象分配一个
  • 在 R 中的 read.csv 中指定 colClasses 时出现问题

    我试图在 read csv 中指定 colClasses 以尝试加快 csv 文件的读取速度 但是 我遇到了以下问题 假设我有一个名为 t csv 的文件 a b x 0 然后 如果我在 R 中运行以下命令 data lt read csv
  • 客户端-服务器 Java GUI:读/写导致程序冻结

    我正在用 Java 编写客户端 服务器程序 包括 GUI 我在客户端有以下代码 public class SBListener implements ActionListener public void actionPerformed Ac