簡體   English   中英

Runtime.getRuntime()。exec(),執行Java類

[英]Runtime.getRuntime().exec(), executing Java class

我正在從應用程序內部執行Java類。

proc = Runtime.getRuntime().exec("java Test");

我如何識別Test是否成功執行(即無異常)?


重定向輸出/錯誤:

proc = Runtime.getRuntime().exec(new String[] {
    "java",
    mclass,
    ">NUL 2>test.txt"
});

cmd

java Main >NUL 2>test.txt
process.waitFor();
int exitCode = process.exitValue();
if(exitCode == 0) { // success }
else { // failed }

如果Test設計正確,並且返回適當的退出代碼(通常,如果出了問題,> 0,則此方法有效)。

如果要獲取Test的輸出/錯誤消息以確定問題所在,則應獲取proc.getInputStream() (這將返回子進程的輸出流), proc.getErrorStream()並從輸入流中分別讀取線程。

請注意,如果子進程寫入錯誤/輸出流並且沒有讀取器,它將被阻塞。 因此,在任何情況下,讀取過程的錯誤/輸出流都是有用的。

避免子阻止的另一種方法是將其錯誤/輸出重定向到文件和/或/dev/null (對於Windows為'NUL'):

Runtime.exec("java Test >/dev/null 2>&1");
Runtime.exec("java Test >/dev/null 2>erroroutput");

重定向是由外殼處理器完成的,而不是由Runtime.exec() (至少在Windows上不是)。
您需要通過cmd.exe執行命令:

String command = "cmd /c java -classpath D:\\dev\\temp\\ Main >NUL 2>test.txt";
proc = Runtime.getRuntime().exec(command);

參見過程類

您可以調用proc.waitFor()返回一個整數值。 但是您必須確保正確處理了程序的所有輸出(例如,使用proc.getInputStream()方法)。

您是否嘗試過proc.exitValue()

您可以使用Java的ProcessBuilder類來執行這些文件。

Errr ...什么? 這樣做:

int response = (int)(getClass().getClassLoader().findClass("Test").
        getMethod("someStaticMethod", new String[]{}).
        invoke(null, new Object[]{}));

這將調用動態加載的類“ Test”的靜態方法“ int someStaticMethod()”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM