Вот правильный способ запустить такой процесс:
Path imagesDir = Paths.get(
System.getProperty("user.home"), "Documents");
Path inputFile = imagesDir.resolve("mb-finer-19.pbm");
Path outputFile = imagesDir.resolve("mb-finer-19.svg");
ProcessBuilder builder = new ProcessBuilder(
"C:\\webstudio\\potrace113win32\\potrace.exe",
"--svg",
inputFile.toString(),
"-o",
outputFile.toString());
builder.inheritIO();
Process process = builder.start();
int exitCode = process.waitFor();
if (exitCode != 0) {
throw new IOException("Got error code " + exitCode
+ " from command " + builder.command());
}
inheritIO () приведет к тому, что весь вывод дочернего процесса появится в выводе программы Java, котораявызывает его, избавляя от необходимости самим использовать InputStream и ErrorStream процесса.
Одно важное преимущество использования отдельных аргументов командной строки вместо одной командной строки заключается в том, что имена файлов с пробелами в них будут обрабатываться правильно.Это делает ваш код более переносимым, так как он будет работать с любым допустимым файлом и любым допустимым каталогом.