process.destroy()肯定能关闭外部程序。
但你需要确定什么时候才能调用process.destroy()

解决方案 »

  1.   

    我的程序运行在TOMCAT下,如果TOMCAT立即关闭,程序中并不会调用 close(),所以我加了finalize(),可是好象finalize()没什么作用。
    有什么好办法吗?
      

  2.   

    finalize()只有在gc收垃圾的时候才会被调用。
    楼上说的有理,要看你的需求啦!
      

  3.   

    不过如果你的类是作为SERVLET调用的话可以写一个方法:
    public void destroy() {
        process.destroy();
      }
    这个方法在TOMCAT关闭之前会调用的。OK了。如果不是SERVLET,也可以在一个SERVLET里面调用这个close(),把它申明为static类型的。
    SERVLET呢,就把它配置成自动启动的。
    web.xml里给该SERVLET配置加上:
        <load-on-startup>1</load-on-startup>
      

  4.   

    那么楼上的不是servlet 以自动启动就会先destroy掉??
      

  5.   

    而且 为什么 
    我会出现这种错误
    java.lang.IllegalMonitorStateException: current thread not owner
    at java.lang.Object.wait(Native Method)
      

  6.   

    to javahui(阶级斗争要年年讲,月月讲,天天讲。
    我是使用AXIS,可是我不能修改AXIS的代码来调用这个destroy()方法吧。
      

  7.   

    finalize()方法的调用可能是不可预知的。所以不能保证他一定执行。而且有可能在类刚实例花的时候finalize()就被调用。当然不必修改AXIS的代码。但是你可以写一个小SERVLET,保证JSP容器启动的时候启动这个SERVLET。这个SERVLET实现一个destroy()方法。该方法一定会在JSP容器关闭的时候执行。这样你就可以在这个destroy()方法里面执行一些清理资源的收尾方法。
      

  8.   

    我的程序里直接调用process.destroy();也无法关闭子进程,不知为什么
      

  9.   

    直接调用process.destroy()应该可以吧。我有一个JSP页面,把process定义为全局对象,每次执行新任务前就执行process.destroy(),总可以关闭子进程的。
      

  10.   

    process.destroy()是不是关闭所有的子进程(是不是dos里运行的程序),借光问一下
      

  11.   

    to javahui(阶级斗争要年年讲,月月讲,天天讲。) 
    我的程序中是这样的:
    通过JAVA程序启动一个.bat文件,在.bat文件中又会启动其他进程,比如java.exe
    这样子进程启动后会出现一个cmd进程,同时还有一个java进程。
    调用process.destroy()后,只能关闭cmd进程,无法关闭java进程。
    有没有什么好办法?