【问题标题】:Multiple Command Prompts / Consoles in Java?Java中的多个命令提示符/控制台?
【发布时间】:2014-02-21 18:19:46
【问题描述】:

也许是一个尴尬的问题,但我想知道是否可以运行一个 Java 控制台应用程序,它以某种方式链接到多个命令提示符。

我欣赏的是有一个 Java 应用程序,它提供一个控制台用于读取控制台输入,一个用于提供 A 类控制台输出,一个用于提供 B 类输出等等。

对此有什么想法或方法吗?

编辑:

我正在考虑类似于..的东西

System1.out.println("output A");
System2.out.println("output B");

我的特殊问题如下:

我必须通过控制台向用户提供大量输出,为了使其更具可读性并提供更多结构概述,我想使用更多控制台。

【问题讨论】:

    标签: java console console-application


    【解决方案1】:

    您绝对可以做到 - 但您需要某种方式在两个实例之间共享信息(例如,数据库,尽管这可能会根据您的使用情况而过大),然后推送/轮询以获取信息更新。

    根据您的设置,您可以让双方互相了解,也可以让他们完全无知。您还可以设置第三个实例作为中继 - 了解所有实例并处理所有渠道的消息传递。

    【讨论】:

    • 你怎么能做到这一点? :)
    • 好吧,要真正简化它:1)创建您的存储 - 比如说一个简单的数据文本文件:data.txt 2)同时循环并将 data.txt 读取到内存中 3)当读取数据时已更新,输出到控制台。 4) 如果您希望一个只读,一个只写,那么您可以使用命令行参数进行设置,或者让它们按顺序启动:第一个打开的是您的阅读器。它写入 data.txt 说“阅读器启动”。下一个打开检查“阅读器已启动”。如果它在那里,它就成为作家 - 否则,它就是读者。
    • 如果你不能做 IO,去创建 3 个进程的路线 - 1 个作为你的“服务器”,而另外 2 个作为你的“客户端”。您的服务器首先启动并接收请求,并将它们存储在其应用程序内存中。任何连接的客户端都会将消息推送到服务器上。使用时间戳,您可以确保他们只收到最新消息。您可以使用套接字 (oracle.com/technetwork/java/socket-140484.html)
    • hm 正如我所说..背景...
    • 我还要提一下——我知道使用 C#/.NET 时问题非常简单(我使用 C# 比使用 Java 好得多)——但我认为如果 .NET 可以做到这一点,Java 也可以。如果这是 .NET,我会让我的控制台程序 (A) 启动它自己的控制台程序 (B),然后将输出从 B 重定向到 A,然后输出。
    【解决方案2】:

    这可以通过将类型 A 和 B 的输出记录到文件并使用 tail/grep 等命令在单独的控制台中查看不同的输出来轻松执行。

    【讨论】:

    • 很遗憾,因为我在嵌入式平台上工作,所以额外的 I/O 对我来说不是一个选项......还有其他想法(请参阅我上面的编辑)?
    【解决方案3】:


    不能像您所说的那样使用 System1.out.println("...");;但是,System 有一个您可以使用的“setOut(PrintStream out)”方法:

    try {
        PrintStream psA = new PrintStream("My_Output_A.log");
        PrintStream psB = new PrintStream("My_Output_B.log");
    
        System.setOut(psA);
        System.out.println("Message for A");
    
        System.setOut(psB);
        System.out.println("Message for B");
    
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    上面的代码将消息打印到 2 个单独的文件中。
    我认为这是您的应用程序所需要的。

    【讨论】:

    • 您好,Marc。
      没有一个控制台可以运行一个 Java 应用程序。可以写入 out 或 err。但是,您仍然可以使用我的建议。为什么不创建一个单独的类来实现我展示的代码。例如像“printFile.output(0)”这样的函数,其中 int '0' 指定要打印到的文件。然后在您的代码中调用“printFile.output(2)”以打印到第二个文件,依此类推。
    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多