我正在尝试终止子线程,这正在等待服务器的输入。我试图用标志来做,但是它停在了
message = serverReader.readLine() && !isClosed()
,
因为它等待服务器的输入,并且只有在输入之后才检查标志并中断。但这不是一个好的解决方案,因为没有服务器消息我无法停止它。
我也尝试过先检查标志,然后再检查readline(),但它也无法正常工作。
有什么好的解决办法吗?
@Override
public void run() {
String message;
try {
while((message = serverReader.readLine()) != null && !isClosed()) {
consoleWriter.println("Other user: " + message);
consoleWriter.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void setUpNetworking() {
try {
Socket socket = new Socket("127.0.0.1", 5000);
InputStreamReader streamReader = new InputStreamReader(socket.getInputStream());
serverWriter = new PrintWriter(socket.getOutputStream());
serverReader = new BufferedReader(streamReader);
//Starting listening messages from server
incomeReader = new Thread(new IncomeMessagesReader(serverReader, consoleWriter, this));
incomeReader.start();
System.out.println("Networking established");
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
交换&&
顺序。 &&
运算符短路,因此如果左侧发生故障,则右侧将不会执行。 ||
则相反。
while (!isClosed() && readLine())