我在一个Java程序中要用Runtime.getRuntime().exec(*.bat)启动好几个java程序的批处理。在JDK1.3中可以在关闭这个java程序其他的进程自动关闭,但是到了JDK1.4后其他的关闭不了了,在线等待...

解决方案 »

  1.   

    对了,用Process.destroy()方法只能关闭那个批处理的cmd.exe进程。java进程依然在运行。
      

  2.   

    建议使用Runtime.getRuntime().addShutdownHook方法,来在java进程退出时,清除相关的资源。
    呵呵,不过这个可能不是你想要的:)
      

  3.   

    我用了,但是不知道在关闭启动java程序中怎么通知他所启动的其他java进程,只能通过Process.destroy()关闭那些个批处理所用的cmd.exe进程,其他的java进程依然在运行。
      

  4.   

    我不知道你那些bat文件里都是运行的什么内容,我做的类似程序都是在新窗口中启动CMD程序,JAVA主程序马上就结束了,能把你的程序贴出来吗?
      

  5.   

    程序比较多,我在主程序中用了ShutdownHandler shutdown = new ShutdownHandler();Runtime.getRuntime().addShutdownHook(shutdown);在启动完其他的批处理以后就等待着,我捕获了那些批处理的输出,所以没有dos窗口弹出来。
      

  6.   


    import java.io.*;
    public class Test {
        static StringBuffer stdout = new StringBuffer();
        public static void main(String[] args) {
            try {
                System.out.println("Hello World!");
                final Process process = Runtime.getRuntime().exec("startServer.bat");
                Runtime.getRuntime().addShutdownHook(new Thread(){
                    public void run() {
                        System.out.println("end hook!!!");
                        process.destroy();
                        System.out.println("1end hook!!!");
                    }
                });
                InputStreamReader inputstreamreader = new InputStreamReader(process.getInputStream());
                char c = (char)inputstreamreader.read();
                if(c != '\uFFFF')
                    stdout.append(c);
                while(c != '\uFFFF') {
                    if(!inputstreamreader.ready())
                    {
                        System.out.println(stdout);
                        try
                        {
                            process.exitValue();
                            break;
                        }
                        catch(IllegalThreadStateException _ex)
                        {
                            try
                            {
                                Thread.sleep(100L);
                            }
                            catch(InterruptedException _ex2) { }
                        }
                    }
                    else
                    {
                        c = (char)inputstreamreader.read();
                        stdout.append(c);
                    }
                }
                try
                {
                    inputstreamreader.close();
                }
                catch(IOException ioexception2)
                {
                    System.err.println("RunCmd : Error closing InputStream " + ioexception2);
                }
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
    }
      

  7.   

    startServer.bat启动一个java进程,在上面这个主程序退出时系统进程中startServer.bat启动的java进程依然运行着
      

  8.   

    你在要执行的bat 文件最后一行写上exit就可以自动关闭了