当前位置: 首页 > 面试题库 >

用流程生成器执行两个命令

阴迪
2023-03-14
问题内容

我正在尝试编写一个从命令提示符下编译另一个Java文件的程序。我对此有疑问。至此,它已成功执行了第一部分,该部分将编译Mocha.java。但是,我希望它也执行该文件并显示其输出。它什么也不显示。有什么建议?

    pb = new ProcessBuilder("javac","Mocha.java");
    try {
        Process shell = pb.start();
        OutputStream shellOut = shell.getOutputStream();
        shellOut.write("java Mocha".getBytes());
        shellOut.close();
        InputStream shellIn = shell.getInputStream();
        String response = IOUtils.toString(shellIn, "UTF-8");
        System.out.println(response);
        shellIn.close();
        shell.destroy();
    } catch (IOException ex) {
        System.out.println("failed");
    }

注意:

我还尝试将所有参数初始化为:

pb = new ProcessBuilder("javac","Mocha.java","&&","java","Mocha");

但是,这不仅没有用,而且甚至没有像上面那样编译Mocha.java。

谢谢!

编辑:

因此,我将其更改为两个过程。现在工作棒!对于任何有兴趣的人:

    pb = new ProcessBuilder("javac","Mocha.java");
    try {
        Process shell = pb.start();
        int error = shell.waitFor();
        shell.destroy();
        if (error == 0)
        {
            pb = new ProcessBuilder("java","Mocha");
            shell = pb.start();
            InputStream shellIn = shell.getInputStream();
            String response = IOUtils.toString(shellIn, "UTF-8");
            System.out.println(response);
            shellIn.close();
            shell.destroy();
        }
    } catch (IOException ex) {
        System.out.println("failed");
    } catch (InterruptedException ex) {
    }

问题答案:

这是正常的:两个命令意味着两个进程。您需要两个ProcessBuilders,并在执行第二个过程之前检查第一个过程的返回值。

这个语法:

new ProcessBuilder("javac","Mocha.java","&&","java","Mocha");

不起作用。&&是逻辑 外壳程序 运算符javac命令不理解。而是直接在Java中执行处理逻辑:

if (p1.waitFor() == 0) // compile succeeded
    // initiate second process


 类似资料:
  • Rust 的Future是懒惰的:除非是向着'完成'这一个目标积极前进,否则他们不会做任何事情。向 Future 完成前进的一种方法是,在async函数里面,对它.await,但这只会将问题升了个级:谁来管理,从顶层 async函数返回的 Futures ?答案是:我们需要一个Future执行者(executor)。 Future executor 获取一组顶层Future,并每当Future可以

  • 问题内容: 我需要在Java中执行具有特定超时的外部批处理文件。这意味着,如果批处理执行的时间比指定的超时时间长,我需要取消执行。 这是我编写的示例代码: 批处理文件“ wait.bat”是这样的: 如您在代码中看到的,批处理文件将花费25秒完成(main方法的第一行),并且Timer将在5秒后销毁命令。 这是我的代码的输出: 如您在输出中看到的,最后一行(“ Really Done …”)在第5

  • 我在我的代码中包括boost,cpprest和openssl,但它给我的错误像follow在android studio使用ndk我给了所有路径的目录和添加到程序它构建成功,但当我运行它时,它给我以下错误 我的cmakelist.txt是 android{compileSdkVersion 28 defaultConfig{applicationId“com.example.dell.cppadd

  • 我尝试从Java执行bash脚本,它返回错误< code >/bin/bash:'/home/卡尼/netbeans projects/Parallel Framework/process-executor . sh ':没有这样的文件或目录,我正在使用netbeans8开发ubuntu 14.04 这是我的代码: 但是当我从终端执行此命令时,它会执行脚本 我的脚本还有另一个问题,它不执行< co

  • 本文向大家介绍PHP执行普通shell命令流程解析,包括了PHP执行普通shell命令流程解析的使用技巧和注意事项,需要的朋友参考一下 这里演示一些普通的shell命令   php执行shell命令,可以使用下面几个函数: string system ( string $command [, int &$return_var ] ) string exec ( string $command [,