หลังจากตรวจสอบข้อมูลจำนวนมากฉันเกือบจะพลิกซอร์สโค้ด Java กระบวนการ Java ดำเนินการสตรีมอินพุตหนึ่งรายการและกระแสเอาต์พุตสองรายการ (เทียบกับโปรแกรมภายนอก) เมื่อสตรีมเอาท์พุททั้งสองมีเอาต์พุตเนื้อหาและผู้ดำเนินการ Java ไม่ได้ล้างกระแสเอาต์พุตในเวลากระบวนการจะถูกบล็อก
ตอนนี้ฉันได้โพสต์รหัสแล้วหวังว่าจะช่วยเพื่อนที่ต้องการ:
คัดลอกรหัสดังนี้:/**
* PDF เป็นฟังก์ชัน SWF
* @param พา ธ พา ธ และพาพุทไฟล์
* @param inputfilename ป้อนชื่อไฟล์
* @param outputfilename ชื่อไฟล์เอาต์พุต
* ไฟล์ @return สร้างไฟล์ SWF
-
ไฟล์คงที่ส่วนตัว toswf (สตริง SourceFile, สตริง destFile, คำสั่งสตริง) {
long begintime = system.nanotime ();
runtime rt = runtime.getRuntime ();
พยายาม {
กระบวนการกระบวนการ = rt.exec (คำสั่ง);
inputStream สุดท้าย isnormal = process.getInputStream ();
เธรดใหม่ (ใหม่ runnable () {
โมฆะสาธารณะเรียกใช้ () {
bufferedReader br = new bufferedReader (ใหม่ inputStreamReader (isnormal));
StringBuilder buf = new StringBuilder ();
สตริงบรรทัด = null;
พยายาม {
ในขณะที่ ((line = br.readline ())! = null) {
buf.append (บรรทัด + "/n");
-
} catch (ioexception e) {
E.PrintStackTrace ();
-
System.out.println ("ผลลัพธ์ผลลัพธ์คือ:" + buf);
-
}). start ();
inputStream isError = process.getErrorStream ();
bufferedReader br2 = bufferedreader ใหม่ (ใหม่ inputstreamreader (iSerror));
StringBuilder buf = new StringBuilder ();
สตริงบรรทัด = null;
ในขณะที่ ((line = br2.readline ())! = null) {
buf.append (บรรทัด + "/n");
-
System.out.println ("เอาต์พุตข้อผิดพลาดคือ:" + buf);
พยายาม {
process.waitfor ();
} catch (interruptedException e) {
E.PrintStackTrace ();
-
} catch (ioexception e) {
E.PrintStackTrace ();
-
endtime long = system.nanotime ();
System.out.println ("ถึงเวลา SWF ใช้เวลา:" + (endtime - begintime) / 1000000000 + "วินาที" + SourceFile);
ส่งคืนไฟล์ใหม่ (destFile);
-