关于用exec()启动一个可执行文件,偶知道怎么用.现在想用它启动一个JAVA程序,参考了网上一些写法,都没有成效,诸如这种写法:Runtime.getRuntime().exec("java -classpath d:\\jexam StoreProc")只启动了java程序,但没运行我的程序.d:\\jexam 已经在环境变量里设置过了,这样写Runtime.getRuntime().exec("java StoreProc"),也不行!
已经折腾了两天了,哪位大虾实现过,麻烦给出详细一点的说明,谢谢啦!

解决方案 »

  1.   

    尝试一下使用全路径,路经中最好不要有空格,如果有,使用exec(String[] cmdarray)这个函数代替exec(String arg),把每个独立的参数都放到数组中。
      

  2.   

    不论是JAVA.EXE的全路径还是类的全路径都试过了,不行哦
      

  3.   

    写成bat文件 bat文件里设置环境变量 Runtime.getRuntime().exec执行这个bat文件
      

  4.   

    Process prs = Runtime.getRuntime().exec("d:\\my.bat");
    bat文件:
    java StoreProc
    @edho   off   
    cls
    没效果,哪儿不对?
      

  5.   

    难道java多线程形同虚设?
    new A(new B().start());以前只用过,利用exec()开启一个..\\路径\\*.exe的进程,执行java类,没搞过
      

  6.   

    StoreProc.class在d:\\jexam这个目录下吗?
      

  7.   

    我主要是想实现让一个程序启动另一个程序,在启动之后,本程序继续执行自己的工作,或者可以监视被启动的程序,这样可以用多线程实现吗?如果可以怎么做?StoreProc.class是在d:\\jexam这个目录下
      

  8.   

    StoreProc的执行什么功能,你怎么知道它没有运行,如果只是往控制台输出的话,是看不到的,需要对返回的Process调用getOutputStream()方法察看输出
    如果你要在独立的线程中启动该进程,可以使用如下代码:
            new Thread()
            {
                public void run()
                {
                    try
                    {
                        Runtime.getRuntime().exec("java -classpath d:\\jexam StoreProc");
                    }
                    catch ( IOException e )
                    {
                        e.printStackTrace();
                    }
                }
            }.start();
      

  9.   

    执行Runtime.getRuntime().exec()要对输入输出进行处理,也就是执行结果的缓冲必须被消耗掉
      

  10.   

    我的程序:
    System.out.println("Start Processing");
    try{
       System.out.println("Programme is Running ...");
       Process prs = Runtime.getRuntime().exec("d:\\my.bat");
       System.out.println("exec...");
       System.out.print(loadStream(prs.getInputStream()));
       System.err.print(loadStream(prs.getErrorStream()));
      }catch(IOException e){
    e.printStackTrace();
      }
    System.out.println("Programme Stop");
    }
    所执行的StoreProc是一个调用存储过程的程序,单独调试是能成功运行的.调试上面的程序时,输出到:Programme is Running ...控制台就不再显示其他信息了,说明没有启动StoreProc.
    java -classpath d:\\jexam StoreProc这种写发试了,没用,调试结果同上
      

  11.   

    输入.waitFor(),在eclipse里面报Unhandled exception type InterruptedException
      

  12.   

    晕倒,那你就try catch一下嘛
      

  13.   

    程序:
    --------------------------------------------------------
    try{
        System.out.println("Programme is Running ...");
        Process prs = Runtime.getRuntime().exec("d:\\my.bat");
        System.out.println("exec...");
        InputStream stderr = prs.getErrorStream();
        InputStreamReader isr = new InputStreamReader(stderr);
         BufferedReader br = new BufferedReader(isr);
         String line = null;
         System.out.println("<ERROR>");
         while ( (line = br.readLine()) != null)
              System.out.println(line);
         System.out.println("</ERROR>");
         try{
    int val=prs.waitFor();
    System.out.println("val:"+val);
    }catch(InterruptedException ee){
        ee.printStackTrace();
    }
        }catch(IOException e){
             e.printStackTrace();
        }
    System.out.println("Programme Stop");
    -------------------------------------------------------------------
    运行结果:
    -------------------------------------------------------------------
    Start Processing
    Programme is Running ...
    exec...
    <ERROR>
    java.lang.NoClassDefFoundError: StoreProc (wrong name: myPackage/StoreProc)
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    Exception in thread "main" 'edho' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    </ERROR>
    val:0
    Programme Stop
    ----------------------------------------
    出现的错误主要是跟exec内的错误有关,在DOS环境下,不是在本地执行类文件,就会出现上面的错误,里面的参数到底怎么指定呢?
      

  14.   

    String[] cmd=new String[3];
    cmd[0]="cmd";
    cmd[1]="/c";
    cmd[2]="yourbat.bat";
    Process proc=Runtime.getRuntime().exec(cmd);
    一般就应该可以了我有个问题:
    我想要在bat里调用wmic process list>list.txt
    结果就卡住了
    用进程管理器看 wmic的进程已经被调起来 可是却没有继续往下运行 停在那儿了
    list.txt文件已经生成却  却一直都是0字节
    直到我用ctrl-c停掉我的java程序 list.txt文件内才出现内容