[英]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.