Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Runtime.getRuntime().exec(), executing Java class

I am executing Java class from inside my application.

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

How can I recognize whether Test executed successfully or not (i.e. no exceptions)?


Redirecting output / error:

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

From cmd:

java Main >NUL 2>test.txt
like image 671
Little Jeans Avatar asked Dec 22 '22 20:12

Little Jeans


1 Answers

process.waitFor();
int exitCode = process.exitValue();
if(exitCode == 0) { // success }
else { // failed }

This works, if the Test is designed properly and returns appropriate exit codes (generally, >0 if something went wrong).

If you want to get Tests output/error message to determine what was wrong, you should get proc.getInputStream() (this returns the output stream of the child process), proc.getErrorStream() and read from the input streams in separated threads.

Note that the child process will get blocked if it writes to error/output stream and there are no readers. So reading error/output streams of the process is useful in any cases.

Another option to avoid child blocking is to redirect its error/output to a file and/or to /dev/null ('NUL' for windows):

Runtime.exec("java Test >/dev/null 2>&1");
Runtime.exec("java Test >/dev/null 2>erroroutput");
like image 129
khachik Avatar answered Dec 24 '22 11:12

khachik