run.exec("cmd.exe /c start tree");我想用java执行dos命令,但是dos命令懂的并不多,我想显示当前目录下的树型结构,可是这样执行dos总是一闪而过,怎么让它不自动关闭,有时候Java在dos下执行命令有时候窗口会自动关闭,有时候不会关闭呢,(比如打成jar包,会有一个dos窗口一闪而过)求高手好好解释解释,在这里先谢过了。急求,,,答案

解决方案 »

  1.   

    Runtime.getRuntime().exec("cmd.exe /c start tree");
    不好意思,这是完整代码,求解了,顶了
      

  2.   

    打成jar包后,在命令行执行
    java -jar xxx.jar
      

  3.   

    cmd /c   是执行完命令后关闭命令窗口。cmd /k  是执行完命令后不关闭命令窗口。
      

  4.   

    "cmd.exe /k start tree" 还是关闭dos窗口,我想Runtime.getRuntime().exec("cmd.exe /k start tree");执行完,dos窗口不关闭,顶顶,,,分数我可以加的,帮帮忙了,,
      

  5.   

    这种效果吗?
      Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
      

  6.   

    源代码import java.io.IOException;public class TestExec {
    Process process;
    public static void main(String[] args) {
    TestExec test = new TestExec();
    String open = "cmd.exe /k start tree";
    if (args.length == 0) {
     test.exec(open);
    }
    }
    public void sendParams(String params) { } public void exec(String cmd) {
    Runtime run = Runtime.getRuntime();
    try {
    process= run.exec(cmd);
    } catch (IOException e) {
    e.printStackTrace();

    }
    }
      

  7.   

    如果是在程序中的话。。完全可以不管dos窗口是不是关闭。。
    因为你可以通过程序把执行后的dos窗口的信息取到在java中调用cmd,如果我没有记错的话,窗口的执行过程可以在myeclipse的控制台打印出来。。而真正的dos窗口是不用打开的你说的打开后关闭。。那应该是在cmd下面执行dos命令的结果
      

  8.   

    我的程序
    //用线程的方式读取DOS窗口的输出内容
    class StreamDrainer implements Runnable {   
        private InputStream ins;   
        public StreamDrainer(InputStream ins) {   
            this.ins = ins;   
        }   
        public void run(){   
            try {   
                BufferedReader reader = new BufferedReader(   
                        new InputStreamReader(ins));   
                String line = null;   
                while ((line = reader.readLine()) != null) {   
                    System.out.println(line);   
                }   
            } catch (Exception e) {   
                e.printStackTrace();   
            }   
        }   
    }//在dos下开始执行数据库备份与恢复
    class DatabaseBR{

    public DatabaseBR(){
    }
    public int StartRun(DatabaseBuckup databaseBuckup,String state,String statevalue)
    {
    int exitvalue=-1;
    Runtime rt = Runtime.getRuntime();
    Process processexp = null;

    try{
    //截取文件名称设置日志文件名
    String file=" file=" + "'" + databaseBuckup.getFilepathname() + "'";
    String logfilename=databaseBuckup.getFilepathname().substring(0,
    databaseBuckup.getFilepathname().lastIndexOf("."));
            //得到在dos下执行的命令
    String exp = state + databaseBuckup.getDatabasename() + "/" + 
    databaseBuckup.getDatabasepassword() + "@" + databaseBuckup.getNetname() + 
    statevalue + file;
    //开始执行命令
    System.out.println(exp);
    processexp=rt.exec(exp);
    new Thread(new StreamDrainer(processexp.getInputStream())).start();   
            new Thread(new StreamDrainer(processexp.getErrorStream())).start(); 
            processexp.getOutputStream().close();
            //等待线程执行结束后返回
    try {
           exitvalue=processexp.waitFor();
           System.out.println(exitvalue);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }catch(IOException e){
    e.printStackTrace();
    }

    return exitvalue;
    }
      }
      

  9.   

    你把这些命令写在一个bat文件,使用
    run.exec("cmd.exe /c start a.bat");
    在bat文件中最后加上加上一个停顿的命令看看是否可以puse
      

  10.   

    必须用dos显示文件目录树型结构,,
    也就是相当于在dos下执行tree这个命令,这样可以显示目录树型结构,我想要这种效果,
      

  11.   

    如果在批处理写入tree这个符号,再采用run.exec("cmd.exe /c start a.bat");这个方式,dos窗口不会闭了,但有没有不用批处理文件的,因为不允许有多允的文件
      

  12.   

    你能解释一下什么意思么???
    Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
    关于 /f 
    call
    start
      

  13.   

    你的分两次执行吧,第一次cmd,第二次tree,windows中要不关闭doc窗口是这样弄得。不知道java中这样行不行。
      

  14.   

    JDK 5.0的新特性 有执行本地方法的,好好去看。
      

  15.   


    你能解释一下什么意思么???
    Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
    关于 /f  
    call
    start
      

  16.   

    看到过N个批处理后边加pause。
    弱弱的问一问,批处理有pause吗???
    9楼的答案
    批处理文件是最后加pause
    很有问题。
    win7下可以用timeout命令来暂停,还有一个常用的办法,就是ping本地IP达到暂停的效果,其实,你可以自己写一个延时的程序,不过java写出来的编译为exe的话,就超大了
      

  17.   

     引用 18 楼 zqfddqr 的回复:
    引用 7 楼 zqfddqr 的回复:
    这种效果吗?
    Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
    这个你试没啊
    你能解释一下什么意思么???
    Runtime.getRuntime().exec("cmd.exe /c start call tree /f");
    关于 /f   
    call
    startstart 具体参阅http://blog.sina.com.cn/s/blog_4e11110b0100qyc3.html
    call 具体的看http://hi.baidu.com/ynnal911/blog/item/cc4d484f9f63c9f4d62afc56.html
    其实可以百度的 ....白话一点就是start开一个窗口 call不让他关了 /f 是让你看清楚是什么显示出来了
      

  18.   

    Runtime.getRuntime().exec("cmd.exe /c start call tree /f");