首页 > 解决方案 > 如何使用命令提示符在两个 jar 文件之间创建管道?

问题描述

我目前正试图使用​​ Windows 10 中的命令行在管道上运行两个 jar 文件。

==================================================== ================

这些是我在控制台中输入的步骤:

1.执行:Adder.jar

5

7

2.执行:Doubler.jar

4

3.执行:Adder.jar | Doubler.jar(管道加法器的输出到 Doubler 的输入)

这正是我在控制台中输入的内容:

C:>java -jar "Adder.jar"

5

7

12

C:>java -jar "Doubler.jar"

4

8

C:>java -jar "Adder.jar" | java -jar“加倍器.jar”

Adder.main (Adder.java:29) 处的线程“main”java.lang.NullPointerException 中的异常

doubler.Doubler.main(Doubler.java:32) 处的线程“主”java.lang.NullPointerException 中的异常

C:>

第 29 行的空指针异常来自 Adder 类的语句:

String sFirstNumber = con.readLine();

这是创建 jar 文件的 Adder 类的主要方法:

public static void main(String[] args)
{
    Console con = System.console();

 //      if (null == con)
 //      {
 //          System.out.println("!! Error accessing console: Run in
 //                                     a command window !!");
 //          return;
 //      }

    // Input two numbers from the input stream
    String sFirstNumber = con.readLine();
    String sSecondNumber = con.readLine();  
    int iFirstNumber = Integer.parseInt(sFirstNumber);;
    int iSecondNumber = Integer.parseInt(sSecondNumber);;   

    // Add the numbers
    int iTotal = iFirstNumber + iSecondNumber;

    // Output the result onto the output stream
    con.printf("%d", iTotal);
 }

当我一次运行一个 jar 文件时,一切正常。直到我尝试用“|”连接两个 jar 文件 控制台抛出异常的命令。

在我注释掉检查控制台是否为空的 if 语句之前,控制台会打印出我写的消息并终止。

当我使用“|”时,控制台似乎在 java 虚拟机或其他东西上运行 jar 文件 命令。为什么当我使用“|”时 System.console() 会为空 当我一次运行一个 jar 文件时,带有两个 jar 文件的命令不为空?

标签: javawindowscommand-linejarpipe

解决方案


“|” 命令更改程序的标准输入。在您的 Double.jar 中,标准输入将是 Adder.jar 的标准输出,它不是控制台;这就是 System.console() 为空的原因。

只需尝试使用Scanner和 System.out.println 代替。


推荐阅读