我试图让我的程序编写一个将结束JVM的批处理文件,并删除正在运行的jar文件。
我已经通过调试得出结论,批处理文件没有被执行。这是相关的代码。

public void stopKill() {
    try {
        //The batch file we are writing to
        File killFile = new File("E:\\killFile.bat");
        PrintWriter output = new PrintWriter(killFile);
        //The jar file that is currently running.
        File jarFile = new File(networkCheck.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
        output.println("taskkill /IM javaw.exe /F");
        output.println("del \"" + jarFile.toString() + "\"");
        output.close();
        Runtime r = Runtime.getRuntime();
        //Execute the batch file
        try {
            Process p = r.exec(killFile.toString());
        } catch (IOException ex) {
            System.out.println("Uh-oh!");
        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(networkCheck.class.getName()).log(Level.SEVERE, null, ex);
    } catch (URISyntaxException ex) {
        Logger.getLogger(networkCheck.class.getName()).log(Level.SEVERE, null, ex);
    }
}


这是在我的系统上调用此函数时打印到批处理文件的文本。

taskkill /IM javaw.exe /F
del "C:\Users\Christian\Desktop\Coding\Java\NetworkCheck\dist\NetworkCheck.jar"


谢谢您的帮助。如果有任何需要澄清的信息,请询问。

最佳答案

使用r.exec( "cmd.exe /c start \"E:\\killFile.bat\"" );

10-07 19:02