2016-09-19 12 views
0

ウィンドウでは、Javaを使用して、ほとんどRuntime.getRuntime().execと呼び出して、実行可能なアプリケーションまたはバッチファイルを実行してからproc.getErrorStream()proc.getInputStream()を呼び出して標準出力/エラーストリームを取得します。Javaでは、他のアプリケーションを実行して画面出力を受け取る

が、この時に、私は(caption2ass.exeは、トランスポートストリームからお尻の字幕を抽出することができます人気のツールをknownd もある)「caption2ass.exe」と呼ばれるアプリケーションを持って、それが画面に多くの情報を出力しますしかし、Javaプログラムproc.getErrorStream()またはproc.getInputStream()を呼び出してに情報を受信できないようです。

手動でコマンドラインに「caption2ass.exe」と入力し、[enter]を押しました。その後、画面が表示されます:

manually I entered caption2ass.exe in the cmd

私は画面INFOMATIONを受け取り、SYSOUTに入れて、または将来的に文字列配列に入れしようとしています。

私のJavaコードは以下の通りです:

メインプログラム:

String cmd = "E:\\program_media\\Mikey's Fansub Utilities\\TS-OneKeyProcess\\tools\\caption2ass-pcr\\Caption2Ass_PCR.exe"; 
    Runtime run = Runtime.getRuntime(); 
    Process proc = run.exec(cmd); 
    StreamGobbler errorGobbler = new StreamGobbler(
     proc.getErrorStream(), "GBK", "ERR", System.err); 
    StreamGobbler outputGobbler = new StreamGobbler(
     proc.getInputStream(), "GBK", "OUT", System.out); 
    errorGobbler.start(); 
    outputGobbler.start(); 
    int exitVal = proc.waitFor(); 
    System.out.println("ExitValue: " + exitVal); 

StreamGobbler.java:

public class StreamGobbler extends Thread { 
    InputStream in; 
    String charsetName; 
    String type; 
    PrintStream out; 
    StreamGobbler(InputStream inputStream, String charsetName, String type, PrintStream out) { 
     this.in = inputStream; 
     this.charsetName = charsetName; 
     this.type = type; 
     this.out = out; 
    } 
    @Override 
    public void run() { 
     try { 
      InputStreamReader isr = new InputStreamReader(in, charsetName); 
      char[] cbuf = new char[256]; 
      int len = -1; 
      while (-1 != (len=isr.read(cbuf))){ 
       out.print(Arrays.copyOf(cbuf, len)); 
      } 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } finally { 
      IOUtils.closeQuietly(in); 
     } 
    } 
} 

このJavaプログラムを実行した後、私は唯一のExitValue前に奇妙な文字を得ました: After running this java program, I only got a strange character

私の質問は:どのように出力情報をこの 'caption2ass.exe'の画面でjavaを使って取得するのですか?あなたはここからcaption2assを得ることができます

http://pan.baidu.com/s/1nuCClXR あなたが特に百度から、未知のプログラムを実行しない勇気があるなら、あなたはあなたのサンドボックスでこのプログラムを実行することができます。

すべてのテストを歓迎します。

+0

[java runtime.getruntime()の出力をコマンドラインプログラムの実行から取得する](http://stackoverflow.com/questions/5711084/java-runtime-getruntime-getting-output-from-executing-a) -command-line-program) – Rao

+0

@Rao caption2assは特別なものです。私は通常、proc.getErrorStream()またはproc.getInputStream()を呼び出して情報を取得できません。 – qiangbro

+0

これは標準エラー出力に印刷されますか? stdoutのgetOutputStream()を試しましたか? – ike3

答えて

0

谢谢各位的回复。

私はcaption2assのソースコードを発見した、それは、C++のプログラムです。

私はすべてのログ記録を変更し、情報をstdoutに記録させてから再コンパイルしました。

私は今すぐproc.getInputStream()を使用して、Javaプログラムでcaption2assの出力を受け取ることができます。

関連する問題