我想識別用戶是否使用BufferedReader中的readline方法發送文本。雖然用戶沒有發送任何內容,但Thread保持睡眠狀態。有沒有辦法做到這一點?我想了很長時間,但沒有成功..我想我必須承認如果一個ENTER鍵被按下..但我不知道如何做到這一點..我的程序的界面是控制檯..有沒有辦法知道用戶是否使用readline()方法按下了ENTER鍵? - Java
問題是:我有一個客戶端服務器程序。當客戶端輸入消息時,消息在另一個用戶/客戶端的屏幕上提示。但是,如果用戶在10秒內沒有發送消息,我想要一條消息出現在屏幕上。所以我有一個Thread.sleep(1000)。問題是我不知道何時喚醒線程。
while((mensagem == null) || (!mensagem.trim().equals(""))) {
Thread.sleep(10000);
sendToAll(output, "[Your turn] ", "");
mensagem = input.readLine();
}
最後一行是不是也是正確的,因爲我不想強迫用戶輸入,這樣一來,我迫使,因爲我停止input.readLine()。
SOLUTION: 我使用方法setSoTimeout(10000)。這是代碼解決了這個問題:
public Server(Socket socket) throws SocketException{
this.connection = socket;
this.connection.setSoTimeout(10000);
}
public void run(){
[...]
while((msg != null) && !(msg.trim().equals(""))){
try{
msg = input.readLine();
sendToAll(output, ": ", msg);
} catch (SocketTimeoutException e) {
sendToAll(output, "Time out ", "");
}
}
謝謝大家的想法! :)
什麼問題?你嘗試了什麼? – Xabster
'if(bufferedReader.read()=='\ n')'? –
這是你在找什麼[設置超時限制爲readline](http://stackoverflow.com/questions/7937668/setting-a-time-out-limit-to-readline) ? – Pshemo