来自另一个线程的Java控制台输出被丢弃
我有一个问题,我的一个线程的控制台输出被删除(在Java中)。情况如下:我生成一个线程来侦听(使用阻塞方法)传入的消息。然后将这些消息异步写入控制台。同时,我通过来自另一个线程的Java控制台输出被丢弃,java,multithreading,console,Java,Multithreading,Console,我有一个问题,我的一个线程的控制台输出被删除(在Java中)。情况如下:我生成一个线程来侦听(使用阻塞方法)传入的消息。然后将这些消息异步写入控制台。同时,我通过System.console().readLine()在控制台上读取用户输入 问题是文本根本就不会写入控制台。我的意思是,由于readLine()方法被阻塞,我希望控制台至少在主线程中输入内容后显示已写入控制台的输出。。还是我没抓住重点 有关消息来源是 // ... // handle receiving messages (new
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:如果有机会,您可以更新代码以包含解决方案,或者自己回答问题吗?谢谢!)