【问题标题】:Executing Bash Script Returns Null In Java在 Java 中执行 Bash 脚本返回 Null
【发布时间】:2014-11-22 06:47:55
【问题描述】:

我正在使用 UBUNTU/LINUX
我正在尝试为自己构建 Swing 应用程序(此应用程序也需要在其他平台上运行)并且我无法在 java 上执行某些命令。
我尝试执行“java -version”

这是我的代码:

 Runtime run = Runtime.getRuntime();

    Process p = run.exec("java -version");

    try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {

        for (String output = br.readLine(); output != null; output = br.readLine()) {
            System.out.println(output);
        }

    } catch (IOException e) {
        System.out.println(e);
    }


返回空白页不输出!


但是我可以执行 run.exec("ls") / 或 ("gedit") 等等...并且我 GET DATA
我也可以执行我电脑中的内部程序。
为什么我不能执行 .sh 文件或内置 java 命令并得到空白页?

【问题讨论】:

  • 我把 2 个问题合二为一,我做了 2 个答案,没有一个被接受:-/

标签: java linux swing bash ubuntu


【解决方案1】:

您应该使用ProcessBuilder 来混合标准输出和错误输出:

    ProcessBuilder run = new ProcessBuilder("java", "-version");
    run.redirectErrorStream(true);

    Process p = run.start();

    try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))) {

        for (String output = br.readLine(); output != null; output = br.readLine()) {
            System.out.println(output);
        }

    } catch (IOException e) {
        System.out.println(e);
    }

检查java 父目录是否在您的PATH 变量中(输出System.getenv("PATH"))或使用二进制文件的完整路径。

对于脚本,使用/bin/sh 就像ProcessBuilder run = new ProcessBuilder("/bin/sh", "/path/to/your/script"); 一样

所有路径都可以是absolute,以/ 开头,或相对于System.getProperty("user.dir")(不带/)。

【讨论】:

    【解决方案2】:

    jvm 本身将输出定向到错误流

    try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()))) {
    

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 2013-07-13
      • 2021-04-28
      • 1970-01-01
      • 2017-03-08
      • 2012-06-24
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多