Thanks man. I closed ALL the blasted streams and it seems to work now. Process p = Runtime.getRuntime().exec(cmd.toString()); p.getInputStream().close(); p.getOutputStream().close(); p.getErrorStream().close(); Just closing the input stream didn't work for some reason.
You may need to read from the process's standard output, or close the standard input, before it will proceed. For reading the output, the problem is that the buffer can get full, blocking the program; for closing the input, the problem is that some programs will try to read data from there if it's available, waiting to do so. One or both of these tricks is very likely to straighten things out for you.