У меня есть несколько команд, что мне нужно работать с программой Java:.Тем не заканчивается, когда новый терминал вызывается из Runtime.getRuntime() Exec()
> db2cmd -i "db2 -tvsf \"C:\file1.sql\""
> db2cmd -i "db2 -tvsf \"C:\file2.sql\""
создать новую тему по каждому , но нити никогда не заканчиваются. db2cmd открывает новую командную строку, в которой вы можете вводить команды db2. Но official IBM documentation говорит, что вы можете использовать флаг -i для запуска его в том же командном окне.
public class DirectoryRunner {
public static void main(String[] args){
File f = new File("file1.sql");
String cmd = "db2cmd -i \"db2 -tvsf \\\"" + f.getAbsolutePath() + "\\\"\""
try {
Process p = Runtime.getRuntime().exec(cmd);
IOThreadHandler outputHandler = new IOThreadHandler(
p.getInputStream());
outputHandler.start();
p.waitFor();
System.out.println(outputHandler.getOutput());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
private static class IOThreadHandler extends Thread {
private InputStream inputStream;
private StringBuilder output = new StringBuilder();
IOThreadHandler(InputStream inputStream) {
this.inputStream = inputStream;
}
public void run() {
Scanner br = null;
try {
br = new Scanner(new InputStreamReader(inputStream));
String line = null;
while (br.hasNextLine()) {
line = br.nextLine();
output.append(line + System.getProperty("line.separator"));
}
} finally {
br.close();
}
}
public StringBuilder getOutput() {
return output;
}
}
}
Вы можете заменить весь этот код 'new ProcessBuilder (" db2cmd "," -i ", db2 -tvsf \" "+ f.getAbsolutePath() +" \ ""). InheritIO(). Start() .waitFor() '. Это позволит вам видеть как вывод команды, так и ее стандартную ошибку, которая, вероятно, говорит вам, что файл не найден, поскольку обратные косые черты на своем пути не экранируются, как двойные кавычки (' '') находятся. – VGR
Почему вы хотите отключить команды вместо того, чтобы просто запускать SQL напрямую через JDBC из вашего приложения? –