在Java控制台应用程序中保持输入/输出分离

5
我正在使用Java编写控制台应用程序,类似于聊天客户端:输入和输出是异步完成的。问题在于,如果在用户正在输入时进行某些输出,则屏幕上的行会混乱。
我正在寻找一种解决方案,允许我拥有一个与输出区域分离的输入区域。目前,我正在使用一个额外的线程来轮询System.in上的BufferedReader。
该程序需要在Linux服务器上运行,并通过ssh会话访问。因此,任何仅适用于此环境的提示都可以。
是否有任何高级库可实现此功能?或者有没有使用终端/ ANSI代码的巧妙技巧?ANSI代码s(保存光标)和r(恢复光标)可能有帮助,但我如何知道要跳转到哪里进行输出,以及如何处理滚动?
2个回答

2
我记得很久以前我用过类似的东西但是是在C++中。那时我使用的是ncurses库。你可以看看javacurses,它似乎是ncurses的Java实现。

虽然我因为怀旧而喜欢这个库,它有其独特之处。但它是一个完整的小部件库。你可以使用任何小部件库(例如AWT、SWT)并为此制作两个文本区域。如果没有任何简短的代码片段来分离输入和输出,我不认为使用jcurses有任何意义。 - benez
1
@kewlbfy OP 需要一个在终端中可用的解决方案。据我所知,您提到的小部件库在该上下文中不起作用。 - K Erlandsson

1
听起来你需要使用Curses。JCurses是Curses库的Java实现,可以让你控制终端以允许滚动、定位等操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接