java.io.IOException:正在关闭的管道在Windows上抛出,但在Linux上工作正常

java.io.IOException:正在关闭的管道在Windows上抛出,但在Linux上工作正常,java,linux,windows,runtime.exec,Java,Linux,Windows,Runtime.exec,我试图在Java中使用Runtime.getRuntime.exec()运行命令 当我在Linux中运行代码时,它工作正常。但在Windows上运行相同的代码时,会引发以下错误: java.io.IOException: The pipe is being closed at java.io.FileOutputStream.writeBytes(Native Method) at java.io.FileOutputStream.write(Unknown So

我试图在Java中使用Runtime.getRuntime.exec()运行命令

当我在Linux中运行代码时,它工作正常。但在Windows上运行相同的代码时,会引发以下错误:

java.io.IOException: The pipe is being closed
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(Unknown Source)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at sun.nio.cs.StreamEncoder.implFlush(Unknown Source)
        at sun.nio.cs.StreamEncoder.flush(Unknown Source)
        at java.io.OutputStreamWriter.flush(Unknown Source)
        at java.io.BufferedWriter.flush(Unknown Source)
        at com.telnet.ConnectToTelnet.doTelnet(ConnectToTelnet.java:132)
        at com.telnet.ConnectToTelnet.main(ConnectToTelnet.java:16)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

您需要读取进程的输出。它几乎肯定告诉了您一些您在进入登录阶段时忽略的信息。您需要启动两个单独的线程来读取
stdout
stderr,
,或者使用
Process
ProcessBuilder
类,合并
stderr
stdout
,并使用单个线程

让线程暂时打印输出。这将确切地告诉你当前的问题是什么。更一般地说,您应该在写入用户名之前等待
登录:
提示,在写入密码之前等待
密码:
提示,等等,等待您在这个Telnet会话中要做的所有其他事情:如果您遇到任何意外情况,您需要做出相应的反应


在进程中盲目地清除输出只会导致更多类似这样的难题。

可能是防火墙issue@ScaryWombat这将阻止连接,而不是中断正在运行的I/O操作。OP您必须发布一些代码。防火墙已关闭。'Runtime r=Runtime.getRuntime();进程=r.exec(“telnet 172.16.221.87”);InputStream=process.getInputStream();OutputStream os=process.getOutputStream();BufferedWriter br=新的BufferedWriter(新的OutputStreamWriter(os));br.写入(“数据交换”\r\n);br.flush();'异常出现在最后一行,即br.flush();命令是什么?我正在等待提示,然后提供用户名和密码。但没有找到解决办法。
java.io.IOException: The pipe is being closed
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(Unknown Source)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at sun.nio.cs.StreamEncoder.implFlush(Unknown Source)
        at sun.nio.cs.StreamEncoder.flush(Unknown Source)
        at java.io.OutputStreamWriter.flush(Unknown Source)
        at java.io.BufferedWriter.flush(Unknown Source)
        at com.telnet.ConnectToTelnet.doTelnet(ConnectToTelnet.java:132)
        at com.telnet.ConnectToTelnet.main(ConnectToTelnet.java:16)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)