ウィンドウでは、Javaを使用して、ほとんどRuntime.getRuntime().exec
と呼び出して、実行可能なアプリケーションまたはバッチファイルを実行してからproc.getErrorStream()
proc.getInputStream()
を呼び出して標準出力/エラーストリームを取得します。Javaでは、他のアプリケーションを実行して画面出力を受け取る
が、この時に、私は(caption2ass.exeは、トランスポートストリームからお尻の字幕を抽出することができます人気のツールをknownd もある)「caption2ass.exe」と呼ばれるアプリケーションを持って、それが画面に多くの情報を出力しますしかし、Javaプログラムはproc.getErrorStream()
またはproc.getInputStream()
を呼び出してに情報を受信できないようです。
手動でコマンドラインに「caption2ass.exe」と入力し、[enter]を押しました。その後、画面が表示されます:
私は画面で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
前に奇妙な文字を得ました:
私の質問は:どのように出力情報をこの 'caption2ass.exe'の画面でjavaを使って取得するのですか?あなたはここからcaption2assを得ることができます
:http://pan.baidu.com/s/1nuCClXR
あなたが特に百度から、未知のプログラムを実行しない勇気があるなら、あなたはあなたのサンドボックスでこのプログラムを実行することができます。
すべてのテストを歓迎します。
[java runtime.getruntime()の出力をコマンドラインプログラムの実行から取得する](http://stackoverflow.com/questions/5711084/java-runtime-getruntime-getting-output-from-executing-a) -command-line-program) – Rao
@Rao caption2assは特別なものです。私は通常、proc.getErrorStream()またはproc.getInputStream()を呼び出して情報を取得できません。 – qiangbro
これは標準エラー出力に印刷されますか? stdoutのgetOutputStream()を試しましたか? – ike3