java - 如何使用命令提示符在两个 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 文件的命令不为空?
解决方案
“|” 命令更改程序的标准输入。在您的 Double.jar 中,标准输入将是 Adder.jar 的标准输出,它不是控制台;这就是 System.console() 为空的原因。
只需尝试使用Scanner和 System.out.println 代替。
推荐阅读
- docker - 在没有 Dockerfile 的情况下创建 BusyBox 映像
- c# - C# JavaScriptSerializer 序列化接口中不存在但在原始对象中存在的字段
- r - 将 distinct() 与列名向量一起使用
- python - Sklearn train_test_split() 使用 python 3.7 对奇怪的行为进行分层
- ms-office - 在power bi中如何将数字转换为字符串
- mysql - 如何合并表并获取最新行
- reactjs - 在反应中调用api后设置状态
- javascript - ComponentDidUpdate - 超出最大更新深度 - 错误
- unity3d - Unity C#:从游戏对象(3D)到画布(屏幕空间 - 相机)的线渲染器
- sql - 如何在 Oracle 中分隔连接的字符串?