我想使用 BufferedReader 的 readline 方法识别用户是否发送了文本。当用户没有发送任何东西时,线程一直在休眠。有没有办法做到这一点?我尝试了很长时间,但还没有成功..我想我必须识别是否按下了ENTER键..但我不知道该怎么做..我的程序界面是控制台..
问题是:我有一个客户端-服务器程序。当客户端输入消息时,消息会在另一个用户/客户端的屏幕上提示。但是,如果用户在 10 秒内没有发送消息,我希望屏幕上出现一条消息。所以我有一个 Thread.sleep(1000)。问题是我不知道什么时候唤醒线程。
while((mensagem == null) || (!mensagem.trim().equals(""))) {
Thread.sleep(10000);
sendToAll(output, "[Your turn] ", "");
mensagem = input.readLine();
}
最后一行也不正确,因为我不想强迫用户输入,而这种方式是我强迫的,因为我在 input.readLine() 上停止。
解决方案:我使用 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 ", "");
}
}
谢谢大家的想法!!:)