tags:

views:

2097

answers:

5

How to execute a java program with the help of Runtime.getRuntime().exec(). For example we shall have the java file path as c:/java/abc.java. Please help me with the code.

+1  A: 

You mean you want a Java program to run another Java program. This SO thread might be helpful, in that case.

Adeel Ansari
+1  A: 

Assuming that abc.java contains a main method that you want to execute:

Runtime.getRuntime().exec("javac c:\java\abc.java -d c:\java\")
Runtime.getRuntime().exec("java c:\java\abc")
Chris Bunch
CreateProcess: c:\j2sdk1.4.0\bin\helloworld error=2This is the runtime exception message
Arun
That doesn't really give a whole lot to go off of. Can you edit your question to include a simple helloworld file and the whole stack trace?
Chris Bunch
+1  A: 

Do not forget that:

  • you may need to read stdout/stderr of a java program
  • you may have to set/update environment variable and PATH before executing your java command

    CreateProcess: c:\j2sdk1.4.0\bin\helloworld error=2

means Win32's CreateProcess returns a 2 as error code when it cannot find the command you specify; more specifically, when the command does not refer to an executable file on its lookup path.

Look at this SO question for a more complete "Runtime.getRuntime().exec()" code, and also to this snippet.

This code creates a shell (as in Runtime.getRuntime().exec("cmd /K")), in which you write on sdtin whatever command you want to execute.

The interest of this approach is to reuse the shell process to benefit from a previous command: it you execute a 'cd', then execute a 'dir', the latter command would display the content of the directory referenced by the cd command.

The same would be true for PATH settings, just before using javac or java.

VonC
A: 

Please see the excellent resource which used to be called javaalmanac.

http://www.exampledepot.com/egs/java.lang/Exec.html

try {
    // Execute a command with an argument that contains a space
    String[] commands = new String[]{"grep", "hello world", "/tmp/f.txt"};
    commands = new String[]{"grep", "hello world", "c:\\Documents and Settings\\f.txt"};
    Process child = Runtime.getRuntime().exec(commands);
 } catch (IOException e) {
 }
Thorbjørn Ravn Andersen
+2  A: 

You should use ProcessBuilder instead of Runtime. Basic usage is like:

Process process = new ProcessBuilder(command).start();

You will find more code under the link above. Also see this question.

Fabian Steeg