2016-10-18 6 views
1

У меня есть несколько команд, что мне нужно работать с программой 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; 
     } 
} 
} 

enter image description here

+1

Вы можете заменить весь этот код 'new ProcessBuilder (" db2cmd "," -i ", db2 -tvsf \" "+ f.getAbsolutePath() +" \ ""). InheritIO(). Start() .waitFor() '. Это позволит вам видеть как вывод команды, так и ее стандартную ошибку, которая, вероятно, говорит вам, что файл не найден, поскольку обратные косые черты на своем пути не экранируются, как двойные кавычки (' '') находятся. – VGR

+0

Почему вы хотите отключить команды вместо того, чтобы просто запускать SQL напрямую через JDBC из вашего приложения? –

ответ

0

Использование db2cmd с обоими -i (наследовать окно) и -c (закрыть окно на выходе) параметров командной строки.