ejp java_Java Socket技術 - 如何捕捉BufferedReader.readline()

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();

下面是此方案針對我無法找到一個解決方案:

T1處於活動狀態,等待一些輸入到讀即阻塞。

上下文切換

T2處於活動狀態並正在運行到假套,關閉套接字

上下文切換

因爲T1被阻擋和T2關閉套接字,T1拋出異常。我想要的是捕捉這個SocketException。我不能在T1.run()中放置try/catch(SocketException)。那麼我怎樣才能在T1的運行方法中捕捉到它呢?如果在T1的運行中無法捕捉它,那我怎麼能在其他地方捕捉到它?

PS:

「有關線程調試另一個問題」通常當調試代碼分步實施,就失去一個上下文切換的「活性移動線」。假設我在T1的第20行,發生了上下文切換,我們假設程序從T2的第30行繼續,但調試器不會顯示到T2的第30行,而是顯示「主動運行行'消失了。所以我失去了對代碼的控制。我使用Eclipse for Java和Visual Studio for C#。那麼在調試上下文切換時跟蹤代碼的最佳方式是什麼?

+1

'SocketException'擴展了'IOException'。所以你的'catch'子句應該捕獲'SocketException'。 –

+0

爲什麼你不能在T1的'run()'方法中捕獲'SocketException'? (它是'IOException'的一個子類,所以它會被現有的'catch'子句捕獲,如果你想分別捕獲它,你只需要在早期的'catch'子句中列出它。) –

+0

我知道。但不知何故,我不知道爲什麼,該計劃沒有抓住它。我的意思是我在那裏放置了一個斷點,但程序永遠不會在catch塊中停止。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值