0

追加のコマンドでcmd.exeを呼び出し、Javaを使用して同じコマンドから生成された出力を収集するプログラムをいくつか作成しています。以下はサンプルプログラムです--

public class LoadShell {
    public static void main(String[] args) throws Exception {
    //Line1
        String [] command ={"cmd.exe","/c","dir"};      
    ProcessBuilder probuilder = new ProcessBuilder( command );             
        Process process = probuilder.start();       
        InputStream inputstream1 = process.getInputStream();        
        InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
        BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);      
        String line="";
        while ((line = bufferedreader.readLine()) != null) {
            System.out.println(line);
        }

  }
}

これらのプログラムは期待どおりに機能しています。今、私はより単純な要件を持っています。引数なしでcmd.exeを呼び出し、出力を文字列として収集したいと思います。これは、プロジェクト固有の目的で、プロセスオブジェクトの参照と文字列を別のメソッドに送信したいためです。したがって、Line1のコードを次のように変更しました--

public class LoadShell {
    public static void main(String[] args) throws Exception {
          //Line1
      String [] command ={"cmd.exe"};
      ProcessBuilder probuilder = new ProcessBuilder( command );             
          Process process = probuilder.start(); 
          InputStream inputstream1 = process.getInputStream();        
          InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
          BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);
          int intch;     
        String line="";
        while ((line = bufferedreader.readLine()) != null) {
            System.out.println(line);
        }

       }
}

しかし、この場合、readLineメソッドは印刷後に無期限にハングします--

Microsoft Windows[バージョン6.1.7601]Copyright(c)2009MicrosoftCorporation。全著作権所有。

BufferedReaderだから私も次の代わりにの読み取りを使用してみreadlineました-

while ((intch = bufferedreader.read()) != -1) {
            int ch = (char) intch;
            System.out.println(ch);
          }

しかし、-に対応するバイトを読み取った後、読み取りでさえハングしています。

 Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

プログラムをハングさせずに、以下の完全な出力を取得する方法はありますか?

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\devshankhasharm>

任意のアイデアをいただければ幸いです。

4

1 に答える 1

0

おそらく、フラグがないと、シェルウィンドウを開いているだけであり、その外部プロセスは、コマンドが発行されるのを待っているプロンプト/cに座っているためです。C:\>あなたは何も送らないので、あなたがそれを殺すまでそこに座ります。

于 2012-11-08T14:46:48.480 に答える