[英]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.