[英]Java Socket - how to catch Exception of BufferedReader.readline()
我有一個Thread(假設是T1)從socket讀取數據:
public void run() {
while (running) {
try {
BufferedReader reader = new BufferedReader( new InputStreamReader(socket.getInputStream()) );
String input = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
}
另一個線程(比方說T2)嘗試在其中一個方法中完成程序。 因此T2執行以下操作:
T1.running = false;
socket.close();
這是我無法找到解決方案的場景:
PS:“關於線程調試的另一個問題”
通常,當我逐步調試代碼時,我在上下文切換上丟失了“活動運行線”。 假設我在T1的第20行,發生上下文切換,讓我們假設程序從T2的30.line繼續,但是調試器不會顯示/顯示到T2的30.line,而是'active running line '消失了。 所以我失去了對代碼的控制權。 我使用Eclipse for Java和Visual Studio for C#。 那么在上下文切換時調試時跟蹤代碼的最佳方法是什么?
對於你的問題,假設你正在使用一個線程池,你可能應該創建一個ThreadFactory,在所有線程上安裝一個Thread.UncaughtExceptionHandler,然后在ExecutorService上調用execute()而不是submit()。
對於調試問題,您可以閱讀http://msdn.microsoft.com/en-us/library/ms164746.aspx
您的代碼還有其他幾個問題,所以我會同時解決所有這些問題。
BufferedReader
。 否則,每次循環時丟棄的緩沖區中的數據都會丟失。 readLine()
的結果為null。 如果你得到它,你必須關閉BufferedReader
並退出循環。 BufferedReader
並退出循環。 我想要的是捕獲這個SocketException。
抓住它吧。
我不能在T1.run()中放置try / catch(SocketException)。
你必須。 沒有選擇。 由於上述條款,你必須完全重寫它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.