多くの情報をチェックした後、私はJavaソースコードをほぼ反転しました。 Javaプロセスは、1つの入力ストリームと2つの出力ストリームを実行します(外部プログラムと比較して)。 2つの出力ストリームにコンテンツ出力があり、Javaエグゼキューターが出力ストリームを時間内にクリアしない場合、プロセスはブロックされます。
今、私はコードを投稿しました。
次のようにコードをコピーします:/**
* PDFからSWF関数
* @paramパス入力および出力ファイルパス
* @param inputFileNameファイル名を入力します
* @param outputFileName出力ファイル名
* @returnファイル生成されたSWFファイル
*/
private static file toswf(string sourcefile、string destfile、stringコマンド){
long begintime = system.nanotime();
Runtime rt = runtime.getRuntime();
試す {
プロセスプロセス= rt.exec(command);
final inputstream is -normal = process.getInputStream();
新しいスレッド(new runnable(){
public void run(){
BufferedReader br = new BufferedReader(new inputstreamReader(isNormal));
stringbuilder buf = new StringBuilder();
文字列line = null;
試す {
while((line = br.readline())!= null){
buf.append(line + "/n");
}
} catch(ioException e){
e.printstacktrace();
}
system.out.println( "出力結果は:" + buf);
}
})。start();
inputstream iserror = process.getErrorStream();
BufferedReader BR2 = new BufferedReader(new inputStreamReader(ISERROR));
stringbuilder buf = new StringBuilder();
文字列line = null;
while((line = br2.readline())!= null){
buf.append(line + "/n");
}
system.out.println( "エラー出力IS:" + buf);
試す {
process.waitfor();
} catch(arternedexception e){
e.printstacktrace();
}
} catch(ioException e){
e.printstacktrace();
}
long endtime = system.nanotime();
System.out.println( "SWF Time Takes:" +(endtime -begintime) / 1000000000 + "秒" + sourceFile);
新しいファイル(DestFile)を返します。
}