我使用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();当套接字死掉时,问题就出现了,例如,在writeTo之后,它会永远等待套接字上的输入。过一段时间后,最简单的超时方法是什么?在这种情况下,this也是最好的解决方案吗?我还会在那个解决方案中使用swingworker吗?
谢谢
发布于 2011-08-13 00:36:07
是的,您链接到的解决方案是一个合理而简单的解决方案(“最佳”是非常主观的:)您可以利用SwingWorker#get,这是未来界面的一部分:
SwingWorker<EnvInfoProto, Void> worker = new SwingWorker<EnvInfoProto, Void>() {
...
};
worker.execute();
worker.get(15, TimeUnit.SECONDS);
//will block 15 seconds at most, then throw TimeoutException当然,你可以想出不同的方法来达到你的目标,但我敢打赌,在这个解决方案中涉及的代码比这个更多,所以我会试一试。
https://stackoverflow.com/questions/7042186
复制相似问题