我正在嘗試從 .class 獲取結果,在另一個 .java 上呼叫該行程。兩個檔案的格式如下:
package Ejemplo2;
import java.io.*;
public class Ejemplo2 {
public static void main(String[] args) throws IOException {
Process p = new ProcessBuilder("ls", "-la").start();
try {
InputStream is = p.getInputStream();
int c;
while ((c = is.read()) != -1) {
System.out.print((char) c);
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
int exitVal;
try {
exitVal = p.waitFor(); //recoge la salida de System.exit()
System.out.println("Valor de Salida: " exitVal);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
和
package Ejemplo3;
import java.io.*;
public class Ejemplo3 {
public static void main(String[] args) throws IOException{
File directorio = new File("./out/production/psp-2122/Ejemplo2");
ProcessBuilder pb = new ProcessBuilder("java", "Ejemplo2");
pb.directory(directorio);
System.out.printf("Directorio de trabajo: %s%n",pb.directory());
Process p = pb.start();
try {
InputStream is = p.getInputStream();
for (int i = 0; i<is.available(); i ) {
System.out.println("" is.read());
}
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
結果只顯示目錄和退出代碼,但我真的不知道為什么沒有顯示行程本身。
uj5u.com熱心網友回復:
你可能應該這樣做:
// start in classes root
File directorio = new File("./out/production/psp-2122");
// Run java with fully qualified class name Ejemplo2.Ejemplo2
ProcessBuilder pb = new ProcessBuilder("java", "Ejemplo2.Ejemplo2");
uj5u.com熱心網友回復:
您沒有看到任何錯誤訊息,因為您沒有閱讀任何錯誤流。最簡單的方法是在呼叫之前重定向標準 ERROR -> OUTPUT start():
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectErrorStream(true);
Process p = pb.start();
節省一些輸入,將標準輸出流中的while/for回圈替換為:
try(var stdout = p.getInputStream()) {
stdout.transferTo(System.out);
}
始終waitFor在最后呼叫,以便您知道程序完成:
int exitVal = pb.waitFor();
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/319026.html
