2017-10-08 8 views
-2

Javaコードから外部アプリを開き、ユーザーが外部アプリを終了してからコードを実行するまで待ちます。外部アプリケーションを手動で閉じるまでどのように待機できますか?

私の問題をundrestandするために、私は、ユーザーが閉じるときにweasisと呼ばれる外部アプリケーションと医用画像を開いて、したいが、コードは、患者のプライバシー

を保護するために、画像ファイルを継続し、削除しますweasisここに私のコードです:ここ

public static void openDicomWeasis(){ 
    File folder = new File(OutPutResultFolder); 
    File[] listOfFiles = folder.listFiles(); 
    for (int i = 0; i < listOfFiles.length; i++) { 
     if (listOfFiles[i].isFile()) { 
      File fichierSource = new File(listOfFiles[i].getAbsolutePath()); 
      String fichier="C:\\weasis\\"+listOfFiles[i].getName()+".dcm"; 
      String file=listOfFiles[i].getName()+".dcm"; 
      File fichierDest= new File(fichier); 
      copier(fichierSource,fichierDest); 

      Runtime runtime = Runtime.getRuntime(); 

      try { 
       String query="C:\\Users\\salhi\\Desktop\\projet ath\\dicom viewer\\weasis\\weasis-win32.exe \"$dicom:get -l \'"+fichier+"\'\""; 
       final Process p = runtime.exec(query); 
       int exit= p.waitFor(); 
      } catch (IOException ex) { 
       Logger.getLogger(ConnexionPostgres_Retour.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(RadioApp.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      delete(); 
     } 
    } 
} 

は私のdeleteメソッドです

public static void delete(){ 
    File fichier =new File("C:\\weasis"); 
    try { 
     FileUtils.cleanDirectory(fichier); 
    } catch (IOException ex) { 
     Logger.getLogger(RadioApp.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

私の問題は、ワットないwaitFor()方法私はそれが

をすべきプロセスPは、外部アプリのweasisはまだ

私の説明はプロセスpはweasisを開くことですし、それが終了して仕事をしていることである、とのを開いているにもかかわらず終了することを期待してAITプロセスpが外部アプリにリンクされていないことを示します。プロセスpはweasisがまだ開かれていることを見ることができないので、waitFor()メソッドが期待どおりに待機しない理由がわかります。

ユーザーが手動で外部アプリケーションを閉じてから医療用ファイルを削除して削除するまで、javaに指示するにはどうすればよいですか?

+0

は例外がスローされていますか? –

+0

あなたが正しい場合、実行しているアプリケーションが実際に別のアプリケーションを起動する "起動"アプリケーションである場合は、それから離れて移動します。その後、自分自身で医用画像アプリケーションを起動する方法を見つける必要がありますあなたのアプリケーションで。 –

+0

例外が投げられることはありません –

答えて

0

こんにちはあなたの代わりにそのように終了するプロセスの出力を待つことができます。

BufferedReader stdOut=new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String s; 
     while((s=stdOut.readLine())!=null){ 
      //nothing or print 
     } 
+0

ありがとう、それは私が必要なものでした。 "final Process p = runtime.exec(query);"の後にこのコードを追加すると、 javaコードは、私が外部アプリケーションを閉じるまで待ってから、残りの部分を実行します –

関連する問題