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

来自另一个线程的Java控制台输出被丢弃,java,multithreading,console,Java,Multithreading,Console,我有一个问题,我的一个线程的控制台输出被删除(在Java中)。情况如下:我生成一个线程来侦听(使用阻塞方法)传入的消息。然后将这些消息异步写入控制台。同时,我通过System.console().readLine()在控制台上读取用户输入 问题是文本根本就不会写入控制台。我的意思是,由于readLine()方法被阻塞,我希望控制台至少在主线程中输入内容后显示已写入控制台的输出。。还是我没抓住重点 有关消息来源是 // ... // handle receiving messages (new

我有一个问题,我的一个线程的控制台输出被删除(在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

尝试以下操作:

  • 实现一个线程来读取输入并将其存储在同步映射/向量/列表等中
  • 另一个线程正在侦听该集合,然后该集合将处理该消息
我认为这应该在某种程度上有所帮助……最重要的是,不要在系统输入上运行循环。试试看。

试试这样的方法

  • 实现一个线程来读取输入并将其存储在同步映射/向量/列表等中
  • 另一个线程正在侦听该集合,然后该集合将处理该消息

我认为这应该在某种程度上有所帮助……最重要的是,不要在系统输入上运行循环。尝试一下。

当您写入system.out时,您不是在写入控制台表示的流,而是在写入标准输出,system.console对象表示标准输入,它们是不同的。当您写入system.o时但你不是在写控制台代表的流,而是在写标准输出和System.console对象代表标准输入,它们不一样。Thx的帮助..我尝试了使用BlockingQueue,但它不起作用,是什么让我发疯了。然后我转向其他东西,当我回来时,我意识到这一点我没有正确初始化执行标志,愚蠢的我!!我想这只是其中的一天….:(.设置了执行标志后,它会像预期的那样工作-实际上,您不需要在线程之间共享一些队列或其他内容。不过,再次感谢您。@fxx:如果有机会,您可以更新代码以包含解决方案,或者自己回答问题吗?谢谢!)Thx的帮助..我尝试使用BlockingQueue,但它没有工作,这让我疯狂。然后我转向其他东西,当我回来时,我意识到我没有正确初始化执行标志,愚蠢的我!!我想这只是其中的一天..:(.设置了执行标志后,它会像预期的那样工作-实际上,您不需要在线程之间共享一些队列或其他内容。不过,再次感谢您。@fxx:如果有机会,您可以更新代码以包含解决方案,或者自己回答问题吗?谢谢!)