破坏不工作在Java

我已经创build了一个简单的java程序来打开一个excel文件并写入数据,一旦数据写入,然后继续打开文件来查看电子表格:

String[] cmdarray=new String[]{"cmd.exe","/c","C:\\Users\\Jason\\Documents\\*******\\********\\******.xls"}; Runtime runTime = Runtime.getRuntime(); Process process = runTime.exec(cmdarray); 

作为学习曲线的一部分,然后尝试在10秒后closures文件:

 process.destroy(); 

但是这不是closures窗口。 任何人都可以指出我要去哪里错了吗? 谢谢。

 private static void OpenExcel() throws IOException { //Find the File and open it String[] cmdarray=new String[]{"cmd.exe","/c","C:\\Users\\Jason\\Documents\\*********\\*********\\********.xls"}; Runtime runTime = Runtime.getRuntime(); Process process = runTime.exec(cmdarray); try{ //Delay TimeUnit.SECONDS.sleep(10); }catch (InterruptedException e) { e.printStackTrace(); //Handle exception } //Close Excel System.out.println("Closing Excel"); process.destroy(); } } 

其中一个原因可能是众所周知的JDK bug :

这里的根本问题是,与Unix不同,Windows在进程之间维护父子关系。 一个过程可以杀死自己的直系子女,但是除非你另外安排获取信息,否则不能杀死任何“大孩子”,因为它无法find他们。

您可以尝试直接执行Excel,而不是通过cmd:

 Runtime.getRuntime().exec("C:\\full\\path\\to\\excel.exe C:\\file.xls");