2017-10-08 69 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代码会等待,直到我关闭外部应用程序,然后执行其余部分 –