我怎样才能等到外部应用程序被手动关闭?
How can I wait until external application is manually closed?
我想从我的 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()
没有像我预期的那样等待
即使外部应用程序 weasis 仍处于打开状态,进程 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
}
我想从我的 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()
没有像我预期的那样等待
即使外部应用程序 weasis 仍处于打开状态,进程 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
}