另一个线程的Java控制台输出被丢弃

时间:2011-08-12 02:39:45

标签: java multithreading console

我的某个线程的控制台输出有问题(在Java中)。情况如下:我生成一个线程,该线程监听(使用阻塞方法)传入消息。然后将这些消息异步写入控制台。同时,我通过System.console().readLine()读取控制台上的用户输入。

问题是文本根本不会写入控制台。我的意思是,因为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

1 个答案:

答案 0 :(得分:0)

尝试类似的事情,

  • 实现一个线程以从输入读取并将其存储在同步的map / vector / list等中。
  • 另一个线程正在侦听该集合,然后该集合将处理该消息。

我认为这应该有所帮助......主要的是,不要在系统输入上运行循环。试一试。