ProcessBuilder 在出现错误后卡住了

发布于 2024-09-25 03:26:03 字数 815 浏览 1 评论 0原文

我正在尝试远程执行 .bat 文件并实现以下代码行:

ProcessBuilder processBuilder = new ProcessBuilder(command);
    final Process process = processBuilder.start();

    InputStream stderr = process.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


    while ((line = br.readLine()) != null) {
        System.out.println(line);

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());

但我的程序卡在 while 循环内。 它显示的错误是:

CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.

它永远不会超出 while 循环。但它成功执行了脚本。 任何形式的帮助表示赞赏。谢谢

I am trying to execute a .bat file remotely and implementing following lines of code:

ProcessBuilder processBuilder = new ProcessBuilder(command);
    final Process process = processBuilder.start();

    InputStream stderr = process.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


    while ((line = br.readLine()) != null) {
        System.out.println(line);

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());

but my program gets stuck inside while loop.
The error it displays is:

CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.

It never goes out of while loop.But it executes the script successfully.
Any sort of help is appreciated. Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暖树树初阳… 2024-10-02 03:26:03

您需要确保您也在处理 stderr,并且应该在单独的线程中处理两个流。

阅读此内容并确保您遵循所有建议。

编辑:查看您编写的代码,您似乎已经从这篇精确的文章中复制了代码。事实上,它看起来像清单 4.3 (MediocreExecJavac.java)。

You need to make sure you're also dealing with stderr, and you should be dealing with both streams in separate threads.

Read this and make sure you follow all the advice.

Edit: Looking at the code you've written, you seem to have reproduced code from this precise article. In fact, it looks like listing 4.3 (MediocreExecJavac.java).

霓裳挽歌倾城醉 2024-10-02 03:26:03

在.start()之前添加redirectErrorStream(true)并读取getInputStream()。这将读取 stderr 并将其与 stdout 合并到一个响应中,该响应可以使用 getInputStream() 读取。

    ProcessBuilder processBuilder = new ProcessBuilder(command);
    processBuilder.redirectErrorStream(true);
    final Process process = processBuilder.start();

    InputStream stderr = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


    while ((line = br.readLine()) != null) {
        System.out.println(line);

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());

Add redirectErrorStream(true) before you .start() and read getInputStream(). This will read stderr and merge that with stdout into one response which can be read with getInputStream().

    ProcessBuilder processBuilder = new ProcessBuilder(command);
    processBuilder.redirectErrorStream(true);
    final Process process = processBuilder.start();

    InputStream stderr = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


    while ((line = br.readLine()) != null) {
        System.out.println(line);

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文