两个独立的控制台窗口用于输入和输出?

时间:2012-02-20 22:33:37

标签: java

我有两个线程 - 一个等待输入,另一个打印调试信息。

但是只有一个控制台窗口,所以我不能输入'exit'(或任何停止进程的方式),因为System.out.println会不断打印这些东西。我可以为每个窗口分别设置两个控制台窗口吗?

P.S。我不想仅仅为了这个目的使用Swing - 必须有办法。

3 个答案:

答案 0 :(得分:3)

我能想到的唯一方法是在两个过程之间建立两个不同的过程和一个链接。但我不知道如何做到这一点。也许你最好的选择是使用JOptionPane类。

虽然您声明您不想使用Swing,但我相信JOptionPane将是您的最佳选择。只需使用JOptionPane.showInputDialog即可快速解决您的问题。 Here's a link to JOptionPane's JavaDoc

如果你真的不能使用Swing,总是可以选择按Ctrl + C来停止该过程。

最后一个选项是缓冲输出,只在输入后写入。收到输入后,您将刷新缓冲区然后处理输入。以这种方式,您可以在刷新缓冲区之前阻止应用程序关闭。有两种方法可以做到这一点:

  1. 您可以使用非常大的BufferedWriter(可能是100,000?)并将其存储为静态变量。您可以调用MyClass.out.println()
  2. 而不是调用System.out.println()。
  3. 您可以使用System.setOut()覆盖系统。您将创建自己的PrintWriter,它将接受任何输入并将其发送到LinkedList(或您自己为char设计的LinkedList,如果您选择)。我建议你使用一个链表,因为对于一个链接列表,附加是O(1),而对于一个数组列表,追加是O(n)。
  4. 编辑:

    至于hmjd的建议(文件编写),你会这样做:

    System.setOut(new FileWriter(new File(myFileName)));
    

答案 1 :(得分:3)

登录到一个文件,然后进入另一个窗口并拖尾文件(在unix / mac中使用“tail -f filename”,在另一个操作系统中 - 安装unix / cygwin!)

这会使您的日志与控制台分开,并使其持久化。

有很多日志实用程序可以帮助解决这个问题,甚至可以通过告诉您给定行来自哪个文件来帮助更多。

答案 2 :(得分:2)

您的问题类似于this one,所以我认为答案是一样的。但是,也许this question可能适合您。