コマンドラインコールでいくつかの他のプログラムを実行するために必要なプログラムを作成する必要があります。プログラム1は、プログラム2が読み込んだファイルを生成する。私はこれを安全に行う方法について様々な例を踏襲してきましたが、まだ厄介な問題が1つあります。以下のコードは大部分は動作しますが、waitfor()
の後にsystem.out
が存在する場合のみです。私がこれを取り除くと、私はエラーになります(下記参照)。なぜ何かが起こっているのか分からないと、私はコードに多少不快です。Javaランタイムプロセスwaitforが待機するようには見えない
助けてください。
コード:そのままのSystem.outラインと
public static int executeCommandWithOutputfile(String command,
String outputFile) {
int exitVal = 0;
try {
FileOutputStream fos = new FileOutputStream(outputFile);
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(command);
// any error message?
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(),
"ERROR");
// any output?
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(),
"OUTPUT", fos);
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
exitVal = proc.waitFor();
//don't remove this system out, when I did I got errors.
//System.out.println("ExitValue: " + exitVal);
fos.flush();
fos.close();
} catch (Throwable t) {
t.printStackTrace();
}
return exitVal;
}
出力:削除のSystem.outと
ExitValue: 0
ExitValue: 0
ExitValue: 0
Release note complete.
出力:
[Fatal Error] tmpRelNote2482381115742032425xml:1:1: Premature end of file.
Error : The XML config file is not valid!
Exception in thread "main" java.lang.NullPointerException
at rwe.release.CreateReleaseNote.insertReleaseInfo(CreateReleaseNote.java:96)
at rwe.release.CreateReleaseNote.writeReleaseNote(CreateReleaseNote.java:81)
at rwe.release.CreateReleaseNote.<init>(CreateReleaseNote.java:30)
at rwe.release.CreateReleaseNote.main(CreateReleaseNote.java:19)
Process exited with exit code 1.
例外が発生する箇所、この場合は 'insertReleaseInfo()'を表示する必要があります。 – Viruzzo
waitFor()に達する前にエラーが発生しているようです。デバッガでコードをデバッグしようとすると、何が表示されますか? –