在写入时在控制台中显示文本

时间:2018-02-03 12:57:32

标签: java client-server rmi instant-messaging

我正在用Java制作聊天程序。当用户向服务器发送消息时,服务器将该消息发送给每个其他用户。问题是,当用户输入时,他可以收到一条消息,该消息将写入他正在键入的文本的中间。

用户必须始终能够接收消息,同时能够在不输入正在输入的消息中显示文本的情况下进行写入。

有没有办法在Java中这样做?一个好的解决方案是让控制台的一部分显示消息,另一个仅用于输入。

似乎有类似于ncurses的库,但有没有任何解决方案不依赖于外部库?

使用ANSI转义码清理控制台并不会有帮助,因为用户键入的文本可能会因此而消失。

1 个答案:

答案 0 :(得分:0)

您可以创建2个单独的控制台应用程序(一个读取,一个只发送)。这样你的控制台窗口将是独立的,文本不会冲突。请记住,如果您正在使用会话,则需要将两个会话绑定到同一个用户。

另一种解决方案可能是reading and storing each individual key without pressing enter。当您收到来自其他客户端的响应时,您手动清除所有内容,打印收到的文本,然后放置用户直接输入的内容。

上述两种解决方案看起来都很糟糕,我觉得Swing或JavaFX将是最佳选择。