Java 进入前读取当前控制台输入

Java 进入前读取当前控制台输入,java,multithreading,sockets,Java,Multithreading,Sockets,我正在写一个多线程套接字聊天。在用户按下enter键之前,是否有任何方法可以在给定时间获取控制台输入 假设我正在键入一条消息,当我键入消息时,服务器会向我发送一条消息。服务器的消息将在我当前正在编写的消息之后立即打印 外观: Me>Hey! Server>Heya! Me>How are yServer>Hello! 如果可能,我希望保存“How are y”字符串,将其删除并在服务器输出后再次粘贴: Me>Hey! Server>Heya! Server&

我正在写一个多线程套接字聊天。在用户按下enter键之前,是否有任何方法可以在给定时间获取控制台输入

假设我正在键入一条消息,当我键入消息时,服务器会向我发送一条消息。服务器的消息将在我当前正在编写的消息之后立即打印

外观:

Me>Hey!
Server>Heya!
Me>How are yServer>Hello!
如果可能,我希望保存“How are y”字符串,将其删除并在服务器输出后再次粘贴:

Me>Hey!
Server>Heya!
Server>Hello!
Me>How are y

你的问题归结为两个不同的问题。第一个是逐字从标准输入或控制台读取输入。这本身就很棘手,因为大多数读取输入的常用方法只能读取整行内容

您面临的第二个问题是在屏幕上来回切换,因为您必须更新当前输入和新传入的消息。这是很有可能的,但实现方式在很大程度上取决于您的终端类型和它的功能:

http://unix.stackexchange.com/questions/43945/whats-the-difference-between-various-term-variables
对所有操作系统上所有可能的$TERM值正确执行此操作也是相当棘手的。使用jcurses之类的库可能会做得更好:

https://github.com/sunhong/jcurses

这就把它从你身上抽走了

您如何存储传入的消息?我假设你会有某种队列?我要说的是,从
java.io.Reader
这样的
System.in
读取器中逐字读取是很简单的。棘手的部分是让操作系统不逐行缓冲标准输入。学习jcurses可以做什么在我的任务清单上。如果它可以同时关闭Windows和Linux操作系统的行编辑器,那么耶!谢谢你的回答。我希望有一个更简单的方法,因为我不打算在这个小程序中使用诅咒。