gpt4 book ai didi

Java进程 Swing InputStream和OutputStream操作

转载 作者:行者123 更新时间:2023-11-30 08:11:36 24 4
gpt4 key购买 nike

我有 slcanterm.exe 命令行实用程序,它通过连接到 PC 的 USB-CAN 适配器执行终端功能。我需要从 Java 应用程序启动这个实用程序,然后循环写入和读取到/从这个终端。我的问题是我无法让 InputStream 和 OutputStream 一起工作:

System.out.println( "hello" );
String line;
OutputStream stdin = null;
InputStream stderr = null;
InputStream stdout = null;

Process process = Runtime.getRuntime ().exec ("cmd.exe");
stdin = process.getOutputStream ();
stderr = process.getErrorStream ();
stdout = process.getInputStream ();

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
BufferedReader reader = new BufferedReader (new InputStreamReader (stdout));

line = "slcanterm.exe" + "\n";
writer.write(line );
writer.flush();

// If I uncomment this line reader.readLine() loop is stucked
//writer.close();

while ((line = reader.readLine ()) != null)
System.out.println ("[Stdout] " + line);

System.out.println( "buy" );

如果我不关闭 writerwhile ((line = reader.readLine ()) != null)坚持下去。我需要执行 reader.readLine ()writer.write(line ) 在循环中一起工作。有什么解决办法吗?

最佳答案

1) 您的代码(基本上)是正确的。但是,我遇到了另一个进程的类似问题,该进程在关闭其输入流时响应不佳。如果您关闭进程的输入流(编写器),则该进程实际上会看到他的输入流已关闭并且在尝试从中读取时会失败。就我而言,当他读取失败时,我开始的过程没有很好地响应。这似乎是同一个问题。

2) 您可以通过不使用 cmd.exe 直接启动 slcanterm.exe 来规避此问题。

3) 我看到的另一种可能性是你只附加了一个“\n”,也许 cmd.exe 需要一个“\n\r”。

关于Java进程 Swing InputStream和OutputStream操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com