相关疑难解决方法(0)

摇摆工人超时

我正在使用 SwingWorker 通过 TCP 连接读取数据并在数据返回时显示。

new SwingWorker<EnvInfoProto, Void>() {
  @Override
  public EnvInfoProto doInBackground() {
    try {   
      xxx.writeTo(socket.getOutputStream());
      return ProtoMsg.parseFrom(socket.getInputStream());
    } catch(IOException ignore) { }
    return null;
  }

  @Override
  public void done() {
    try {
      UpdateGui(get());
    } catch (Exception ignore) {}
  }
}.execute();
Run Code Online (Sandbox Code Playgroud)

当套接字死亡时,就会出现问题,例如在 writeTo 之后,它会永远等待套接字上的输入。一段时间后超时的最简单方法是什么?是否也是这种情况下的最佳解决方案?在该解决方案中我还会使用 Swingworker 吗?

谢谢

java swing timeout swingworker

5
推荐指数
1
解决办法
2632
查看次数

Swing Worker没有正确刷新JFrame

我最初尝试在Java Action Listener中多次更新JFrame和JPanel,但两者都只会在Action Listener完成所有任务时更新.这是我原始问题的链接(在Action Listener中刷新JFrame).

我在反馈中被告知Swing Worker应该解决我的问题.但是,当我实现Swing Worker(如下所示)时,没有任何改变.仅当Action Listener完成所有任务时,JFrame和JPanel仍会更新.我的问题是,我错过了下面的内容吗?如果没有,我如何在Action Listener中实现它以及时正确更新Frame和Panel?

@Override
protected Integer doInBackground() throws Exception{
    //Downloads and unzips the first video.  
    if(cameraBoolean==true)
        panel.add(this.downloadRecording(camera, recording));
    else
        panel.add(new JLabel("Could not contact camera "+camera.getName()));

    panel.repaint();
    jframe.repaint();
    return 1;
}

private JLabel downloadRecording(Camera camera, Recording recording){
    //does a bunch of calculations and returns a jLabel, and works correctly
}

protected void done(){
    try{
        Date currentTime = new Timestamp(Calendar.getInstance().getTime().getTime());
        JOptionPane.showMessageDialog(jframe, "Camera "+camera.getName()+" finished downloading at "+currentTime.getTime());
    }catch (Exception e){
    e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

java swing jframe swingworker

0
推荐指数
1
解决办法
1609
查看次数

标签 统计

java ×2

swing ×2

swingworker ×2

jframe ×1

timeout ×1