많은 정보를 확인한 후, 나는 거의 Java 소스 코드를 뒤집어 놓았다. Java 프로세스는 하나의 입력 스트림과 2 개의 출력 스트림 (외부 프로그램에 비해)을 실행합니다. 두 출력 스트림에 컨텐츠 출력이 있고 Java Executor가 제 시간에 출력 스트림을 지우지 않으면 프로세스가 차단됩니다.
이제 도움이 필요한 동료들을 돕기 위해 코드를 게시했습니다.
다음과 같이 코드를 복사하십시오 :/**
* PDF에서 SWF 기능
* @param 경로 입력 및 출력 파일 경로
* @param inputfileName 파일 이름을 입력합니다
* @param outputfileName 출력 파일 이름
* @return 파일 생성 SWF 파일
*/
개인 정적 파일 TOSWF (String SourceFile, String DestFile, String 명령) {
long begintime = system.nanotime ();
런타임 rt = runtime.getRuntime ();
노력하다 {
프로세스 프로세스 = rt.exec (명령);
최종 입력 스트림 isnormal = process.getInputStream ();
새 스레드 (new runnable () {
public void run () {
bufferedReader br = new bufferedReader (new inputStreamReader (isnormal));
StringBuilder buf = new StringBuilder ();
문자열 라인 = 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 ();
문자열 라인 = null;
while ((line = br2.readline ())! = null) {
buf.append (line + "/n");
}
System.out.println ( "오류 출력은 :" + buf);
노력하다 {
process.waitfor ();
} catch (InterruptedException e) {
e.printstacktrace ();
}
} catch (ioexception e) {
e.printstacktrace ();
}
Long Endtime = System.NanoTime ();
System.out.println ( "SWF Time time takes :" + (EndTime -BegIntime) / 10000000000 + "Seconds" + SourceFile);
새 파일을 반환합니다 (destfile);
}