我想从我的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();
}
}
}
这是我的删除方法
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()
没有等待,因为它应该
即使外部app weasis仍然打开,过程p也会完成
我的解释是,进程p完成其工作,即打开weasis然后结束,此时进程p没有链接到外部应用程序。进程p无法看到weasis仍然打开,这就是waitFor()
方法没有按预期等待的原因。
如何命令java等到用户手动关闭外部应用程序然后继续并删除医疗文件?
答案 0 :(得分:0)
您好,您可以等待完成流程的输出,如下所示:
BufferedReader stdOut=new BufferedReader(new InputStreamReader(p.getInputStream()));
String s;
while((s=stdOut.readLine())!=null){
//nothing or print
}