Java 如何等待外部应用程序手动关闭?

Java 如何等待外部应用程序手动关闭?,java,runtime,Java,Runtime,我想从java代码中打开一个外部应用程序,等待用户关闭该外部应用程序,然后继续使用我的代码 为了解决我的问题,我想用一个名为weasis的外部应用程序打开一个医学图像,然后当用户关闭weasis时,代码将继续并删除图像文件,以保护患者的隐私 这是我的密码: public static void openDicomWeasis (){ File folder = new File(OutPutResultFolder); File[] listOfFiles = folder.li

我想从java代码中打开一个外部应用程序,等待用户关闭该外部应用程序,然后继续使用我的代码

为了解决我的问题,我想用一个名为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();
        }
    }
}
我的问题是waitFor方法没有像我期望的那样等待

即使外部应用程序仍处于打开状态,进程p也会完成

我的解释是,进程p完成了它的工作,即打开weasis,然后结束,在这一点上,进程p没有链接到外部应用程序。进程p看不到weasis仍然打开,这就是waitFor方法没有按预期等待的原因


我如何命令java等待用户手动关闭外部应用程序,然后继续并删除医疗文件?

您好,您可以等待流程的输出完成,如下所示:

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

是否引发异常?如果您是正确的,如果您运行的应用程序实际上是一个启动应用程序,它启动另一个应用程序,然后移开,然后,您可能需要找到一种方法来直接在您的应用程序中启动医疗成像应用程序。毫无例外,医疗成像应用程序也是一个使用JRE启动的java应用程序。您能否帮助我找到另一种方法来启动应用程序,并让我的java代码检测应用程序何时启动是否关闭以继续并删除文件?您可以在此处找到答案:非常感谢,这正是我所需要的。在最终进程后添加此代码时,p=runtime.execquery;java代码等待我关闭外部应用程序,然后执行其余的
BufferedReader stdOut=new BufferedReader(new InputStreamReader(p.getInputStream()));
    String s;
        while((s=stdOut.readLine())!=null){
          //nothing or print
        }