2012-08-11 47 views
0

我正在通过从批处理文件运行我的应用程序创建的控制台读取和写入数据。如何在打印内容时在控制台中替换键入的文本?

我正在创建一个小的servlet,而且我遇到了问题,即在输入内容的同时,在输入内容的末尾打印(如客户端连接或断开连接等)。它基本上使一切看起来很有趣,我一直在努力找到一种方法来复制我正在输入的内容,并在其位置打印出发生的事情(即客户端x连接!)并粘贴下面输入的命令,以便我可以继续。

我想我得到了它的一部分工作(我正在打字的部分被替换),但我想不出一种方法来复制我正在打字或放在下一行,以便我可以继续打字。

无论什么时候打印出来,都会调用此方法,它基本上在输出上放置时间戳。

public void say(String s){ 
    Calendar calendar = Calendar.getInstance(); 
    Date now = calendar.getTime(); 
    Timestamp current = new Timestamp(now.getTime()); 
    SimpleDateFormat date = new SimpleDateFormat("HH:mm:ss"); 
    String time = date.format(current); 
    //how it gets printed 
    System.out.println("\r" + time + "> " + s); 
} 

我使用等待输入线程:

Thread thread = new Thread(){ 
    public void run(){ 
     Scanner scan = new Scanner(System.in); 
     while(scan.hasNextLine()){ 
      String s = scan.nextLine(); 
      //do something with s? 
     } 
    } 
}; 
thread.start(); 

任何帮助将不胜感激!

回答

0

也许在say方法中,在打印任何东西之前,它可以检查io缓冲区或管道,以查看它是否包含某些东西(例如,您正在键入的新命令)。如果是这样,保存它,做你应该做的,并把它放回缓冲区。

+0

你能解释一下如何去检查某个缓冲区的内容吗? – user1563402 2012-08-11 01:36:59

+0

环顾四周后,我找不到如何直接从java访问控制台缓冲区。你真的需要系统输出到控制台吗?也许将它输出到日志文件会更好,并且您可以在单独的控制台上监视日志文件? – syzygy 2012-08-13 05:51:46

相关问题