2017-10-08 26 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(); 
     } 
    } 
} 

這裏是我的刪除方法

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()不W上的方法AIT如我所料,它應該

即使外部應用weasis仍然打開

的進程p完成

我的解釋是,進程p,它的工作是打開weasis,然後將其結束,並且在這一點過程p沒有鏈接到外部應用程序。過程p不能看到曠野仍然打開,這就是爲什麼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代碼會等待,直到我關閉外部應用程序,然後執行其餘部分 –

相關問題