【问题标题】:Two separate console windows for input and output?用于输入和输出的两个单独的控制台窗口?
【发布时间】:2012-02-20 22:33:37
【问题描述】:

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

但是只有一个控制台窗口,所以我不能输入“退出”(或任何停止进程的内容),因为System.out.println 不断打印这些内容。我可以有两个单独的控制台窗口吗?

附:我不想仅仅为了这个目的而使用 Swing - 一定有办法。

【问题讨论】:

  • 将调试信息写入文件不是一个选项吗?您可以打开另一个控制台窗口并tail 文件(在进程退出后您还将获得调试信息)。
  • 嗯,这是一个选项,但我不记得该怎么做。从答案来看,虽然没有简单的解决方案,所以我会尝试其中的一些。但现在这不是问题,因为即使我手动终止它,我的端口似乎也能正常关闭。

标签: java


【解决方案1】:

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

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

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

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

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

编辑:

至于 hmjd 的建议(文件写入),您可以这样做:

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

【讨论】:

  • 我实际上使用了一个替换标准输出的版本来在一个系统中实现我自己的日志系统,以替换所有的 system.out。真正酷的事情是,作为拦截的一部分,我可以添加执行 system.out 的类文件/行号并使用该信息来实现过滤器(例如过滤消息,除非它们来自特定类或除非它们包含我的首字母缩写 [bk] ... CPU 时间非常昂贵,但这在开发过程中通常无关紧要,并且可以很容易地关闭以发货。
  • @BillK 你不能只使用查找/替换工具吗?找到“System.out.print”,替换为“MyLogger.log”。但是拦截非常有用。我假设您正在阅读堆栈跟踪以查找该类。对吗?
  • 是的。一个标志可以让我关闭堆栈跟踪。其中一部分是试图在不破坏项目其他部分的情况下解决问题——其中一些被打包在 Jars 中,我们从未重新编译(最初的目标是能够使选定的 prpackaged 库静音)。此外,由于它是 java 1.3 版,我所拥有的只是 Exception.printStackTrace() 所以我的拦截实际上必须换成不同的“system.out”来捕获堆栈跟踪......
【解决方案2】:

登录到一个文件,然后进入另一个窗口并拖尾文件(在 unix/mac 中使用“tail -f 文件名”,在另一个 os--install unix/cygwin 中!)

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

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

【讨论】:

    【解决方案3】:

    你的问题和this one类似,所以我觉得答案是一样的。不过,this question 可能适合您。

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 2014-06-19
      相关资源
      最近更新 更多