我使用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")等...然后我获取数据
我也可以在我的电脑上执行内部程序。
为什么我不能执行.sh文件或内置java命令并获取空白页?
答案 0 :(得分:6)
您应该使用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")
。
答案 1 :(得分:4)
jvm
本身将输出定向到错误流
try (BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()))) {