如题,这个问题困扰了我一下午了。
在网上也找了许多解决办法,多是说起两个线程把InputStream和ErrorStream缓存清空。
我把代码也拷过去试了,还是不行。我就是简单的调用exec("notepad")或exec("cmd /c notepad"),然后启用线程读取InputStream和ErrorStream。
但是程序还是不能退出,直到把记事本关闭了程序才结束。希望高手指点下。

解决方案 »

  1.   

    Process p = Runtime.getRuntime().exec(...);
    // Process p = new ProcessBuilder(...).start();
    // do somethingp.destroy(); // kill this process
      

  2.   

    我就是简单的调用exec("notepad")或exec("cmd /c notepad"),然后启用线程读取InputStream和ErrorStream。
    但是程序还是不能退出,直到把记事本关闭了程序才结束。process.getInputStream() 获得的也是输出到控制台的io流吧。
    记事本是你打开的,当然要关了记事本才能退出程序的吧。楼主想干什么
      

  3.   

    问问题要写清楚
    到底是希望达到关闭exe后才退出Java
    还是希望不关闭exe就退出Java?
      

  4.   

    public class RunTimeTest { /**
     * @param args
     */
    public static void main(String[] args){
    // TODO Auto-generated method stub
    Runtime rt = Runtime.getRuntime();
    ;
    try {
    Process p = rt.exec("cmd /c notepad");
    Thread.sleep(1000);  // 打开程序的时间
    p.destroy();  //程序打开后将cmd关闭
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InterruptedException e) {
    //TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  5.   

    我的目的就是要启动一个外部的exe,并要知道是否启动成功,然后接着干下面的活,不要挂在那。
      

  6.   


    process.waitFor();会一直等待直到“启动成功”~~
      

  7.   

    是啊,启动已经成功了为什么不返回呢。是不是就一直等到外部exe被结束进程呢
      

  8.   


    这位兄弟的方法不行啊,Process p = Runtime.getRuntime().exec(...);这一步执行后就挂在那了
      

  9.   

    public class RunTimeTest {    /**
         * @param args
         */
        public static void main(String[] args){
            // TODO Auto-generated method stub
            Runtime rt = Runtime.getRuntime();
    ;
            try {
                Process p = rt.exec("cmd /c notepad");
                Thread.sleep(1000);  // 打开程序的时间
                p.destroy();  //程序打开后将cmd关闭
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
      

  10.   


    我说的记事本只是一个例子,用这段代码打开记事本是没有问题,如果是打开QQ的话,我试了下是不能打开QQ。