我们都知道可以用Runtime.exec(“cmd.exe /c servertool”)来执行一条servertool  dos下的命令。但是如果这个servertool(JavaIDL中的指令)是一个平台环境,然后我还需要在servertool>....环境下继续输入参数,应该怎么搞?
---------------
说的有点乱。我想做的事情如下:
cmd>servertool -port 1050    
//进入servertool环境
servertool>register -server ServerName ....   (这个要怎么搞?)

解决方案 »

  1.   

    Runtime.exec的返回结果是一个Process,
    而Process对象有三个方法
    getInputStream
    getOutputStream
    getErrorStream
    分别可以取得Process的输入、输出、错误输出流
    如果你需要向进程写入参数,可以用getOutputStream取得输出流,然后往输出流里写参数。提示:你可以用PrintWriter将这个输出流封装一下,使用println方法来输出 ,会方便得多
      

  2.   

    谢谢几位!
    回oracs,我的参数可能是动态的,bat好像不能支持动态参数的吧。
    回jamesfancy,谢谢你的建议,我试一下!
      

  3.   

    谢谢jamesfancy提供的方法。
    不过又出现一个新问题:
    在执行
    servertool>register -server ServerName

    servertool>list
    之间会有一些时间间隔(执行时间),然后我怎样让程序等待register执行完毕之后再执行list?
    process.waitFor()肯定不行了。因为register和list是在同一个thread中。
    然后command中的start/wait好像是针对的外部应用程序,好像也不可以。
    有谁能好的解决方法?PS:jamesfancy的分照常给,如能解决这个新问题,加分!
      

  4.   

    执行完了有输出吗?你可以检查到有输出的时候再往里写东西。
    getInputSteram取的的OutputStream对象应该可以检测输出的。
    具体操作你去查一个JavaDoc,这台机器上没得我懒得查了
      

  5.   

    RE: bat好像不能支持动态参数的吧。
    BAT也支持动态参数的,在BAT时用%1,%2等接收参数,最大%9,如果超出9个参数,就要配合Shift命令使用