Java Аккуратный ввод в консоль
Такая проблема - есть программа (пока-что в планах), которая будет асинхронно выводить информацию, и всегда будет доступен пользовательский ввод, что-то в духе:
[INFO] info...
[WARNING] warning...
$ (тут будет пользовательский ввод)
но, при очередном выводе, java просто перекроет своим выводом строку пользовательского ввода. как от этого можно избавиться? хотелось бы, чтобы строка для ввода всегда была отдельно от вывода, и еще такая программа должна открываться в командной строке, не создавая новых окон.
Ответы (1 шт):
Автор решения: Osman
→ Ссылка
В своем тестовом консольном чате я использовал два потока:1-читает все сообщения и выводит их на консоль,другой считывает сообщения с консоли и отправляет их. Примерный код:
//читает сообщения и выводит их
private class ReadThread extends Thread{
@Override
public void run(){
try{
System.out.println("ReadThread running...");
while(!stop){
//reader - BufferedReader,ресурс сообщений
System.out.println(reader.readLine());
}
}catch(IOException e){
System.out.println("ReadThread closed...");
}
}
}
//читает с консоли и отправляет сообщения
private class SendThread extends Thread{
@Override
public void run(){
String userStr = "";
while(!userStr.equals("_exit_")){
userStr = scanner.nextLine();
writer.println(userStr); //writer - PrintWriter-для отправки сообщений
}
}
}