Java cannot execute system command (Ubuntu)

2019-05-20 08:05发布

问题:

It's not the first time I have tried to execute a system command from Java; but this time it turns out to be very hard. I have a script that executes just fine from the terminal. It reads input from a file (input.txt), it processes it and exports the result in another file (ouput.txt). The whole thing lasts no more than 1sec. But, when I try to execute it from Java, it gets stuck and never finishes. This is my code:

Process p = new ProcessBuilder("./runCalculator.sh").start();
p.waitFor();

I have also tried with Runtime.getRuntime().exec("./runCalculator.sh") but all the same. I've read both the InputStream and the ErrorStream of the process. The error stream returns nothing but a message like "Starting Calculation..."

Any ideas?

回答1:

You need to use the following code:

ProcessBuilder pb = new ProcessBuilder();
pb.command("bash", "-c", "./runCalculator.sh");
Process process = pb.start();
int retValue = process.waitFor();


回答2:

You likely need to invoke the unix command interpreter/processor for this to work. Please see: When Runtime.exec() won't.



回答3:

Try this:

Process p = new ProcessBuilder("sh ./runCalculator.sh").start();


回答4:

Another, simplier solution is that you can open program by entering the name of the program (this assumes that program is installed) instead of creating script and calling it.

Note that the name of the program isn't always what you see in Gnome's menu, for example Gnome's calculator is "gnome-calculator".

Regarding this facts, you can run calculator by the folowing line:

Process p = Runtime.getRuntime().exec("gnome-calculator");

In that case you don't have a need for any sh scripts (in your case runCalculator.sh).



标签: java stream