我的一個線程被丟棄(以Java語言)的控制檯輸出出現問題。情況如下:我生成一個線程,偵聽傳入消息(使用阻塞方法)。這些消息然後異步寫入控制檯。同時,我通過System.console().readLine()
在控制檯上讀取用戶輸入。從另一個線程的Java控制檯輸出丟失
問題是文本永遠不會寫入控制檯。我的意思是,因爲readLine()
方法被阻塞,所以我希望控制檯至少能夠在主線程輸入內容時顯示已寫入控制檯的輸出。或者我在這裏忽略了這一點?
相關來源是
// ...
// handle receiving messages
(new Thread() {
@Override
public void run() {
while (executing) received(new String(subSocket.recv(0)));
}
}).start();
// ...
String input;
try {
while ((input = System.console().readLine()) != null && !input.equals(".")) {
pubSocket.send(input.getBytes(), 0);
Thread.yield();
}
}
catch (Exception ex) { }
finally {executing = false;}
和接收的方法是
public void received(String s) {
System.console().format("(%s)", s);
System.console().flush();
}
我在做什麼錯?還是有更好的方法來做到這一點?我的意思是,我試圖用一個BufferedReader
爲了封裝輸入流中讀取它面向行及其所使用的System.out.format()
沿..達到同樣的效果 - 沒有什麼:(
乾杯, FXX
當您寫入System.out時,您並未寫入控制檯表示的流,您正在寫入標準輸出,並且System.console對象表示標準輸入,它們並不相同。 –