【问题标题】:Command is not running while running using java使用 java 运行时命令未运行
【发布时间】:2016-07-15 19:26:47
【问题描述】:

我想使用 java 程序在终端(Ubuntu)中运行命令

在网上冲浪后,我发现了使用 java 执行命令的方法

以下是ubuntu中查找ldd版本的代码

String[] command = { "ldd", "--version" };
            ProcessBuilder probuilder = new ProcessBuilder(command);
            Process process = probuilder.start();
            InputStream is = process.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;
            process.waitFor();

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

在上面的代码中,我试图在 ubuntu 中使用 java 找出“ldd verison”。效果很好,我得到了 ldd 版本。

但是当我试图以同样的方式找到我的 ubuntu 的 java 版本时。 代码没有返回任何内容,因为 br.readline 为空。 iwas abel 去查找 ldd vesion,为什么不是 java 版本?

以下是在ubuntu中使用java查找java版本的代码

String[] command = { "java", "-version" };

    ProcessBuilder probuilder = new ProcessBuilder(command);
    Process process = probuilder.start();

    InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    process.waitFor();

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

请有人帮我找出如何在 ubuntu 中使用 java 代码查找 java 版本。

【问题讨论】:

  • 读取错误流以了解发生了什么。也许 Java 不在 PATH 中。
  • 尝试以与输入流相同的方式打印process.getErrorStream()。您可能会在该流中收到错误消息。
  • 我能想到的唯一解释是java 不在您的PATH 变量上。如果是这样,当您的 Java 代码运行 java -version 时,它实际上会出错。
  • 收到错误消息后请及时更新问题。
  • System.getProperty("java.specification.version") 如stackoverflow.com/questions/2591083/…中所建议的那样

标签: java ubuntu terminal


【解决方案1】:

不幸的是,这就是 Java 的实现方式。似乎 Java 的 -version 选项是通过 stderr 而不是通常的 stdout 打印的

参考: Why does 'java -version' go to stderr?

这种现象解释了为什么您的子进程运行命令但似乎所有内容都是通过 stderr 通道打印的.

您应该能够通过 'java.version' 系统属性获取 Java 版本号。

示例:

System.out.println( System.getProperty("java.version") );

输出:

1.8.0_51

您可能对可以打印的其他 Java 相关属性感兴趣,例如运行时和产品构建版本等。

见: http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    相关资源
    最近更新 更多