[英]How to continuously read from a Java socket's inputstream despite blocking code?
我正在通过创建一个多人纸牌游戏应用程序来学习Java Socket编程。 客户端将同时处理游戏和一个小的聊天窗口。
我的客户端从服务器循环读取指令,如下所示:
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
if (line.startsWith("SOME_COMMAND") {
// get necessary input from user
} else if (line.startsWith("MESSAGE") {
// tell EDT to update chat window
}
}
但是,我的问题是,从用户那里获取输入会暂停循环,从而阻止聊天窗口更新。
对于此类问题是否有“最佳实践”? 我当时正在考虑在一个单独的线程中运行的过滤器的处理方式,该过滤器处理消息并将非消息反馈到主线程将循环通过的新流中。
不要在EDT中执行非UI的工作。 总是做一些事情,例如从单独的线程中读取套接字等内容。 有两种方法可以做到这一点:
SwingUtilities.invokeLater
或SwingUtilities.invokeAndWait
通知更新是否有EDT。 这可能是进行套接字轮询的最佳方法。 SwingWorker
启动非EDT活动。 我个人认为SwingWorker
仅适合于响应用户的某些操作 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.