ใช้ Java เพื่อรันคำสั่ง bat หากการดำเนินการ bat ใช้เวลานานเกินไป อาจทำให้เกิดปัญหาในการบล็อก และ bat จะไม่ถูกดำเนินการจนกว่าเซิร์ฟเวอร์จะปิดตัวลง
ชอบ:
คัดลอกรหัสรหัสดังต่อไปนี้:
รันไทม์ r=Runtime.getRuntime();
กระบวนการ p=null;
พยายาม{
เส้นทางสตริง = "D:/test.bat";
p = r.exec("cmd.exe /c "+เส้นทาง);
p.waitFor();
} จับ (ข้อยกเว้นจ) {
System.out.println("ข้อผิดพลาดในการรัน:"+e.getMessage());
e.printStackTrace();
-
โดยทั่วไปแล้ว exec ของ Java จะไม่ช่วยคุณจัดการกับปัญหาการบล็อกเธรด และจำเป็นต้องได้รับการจัดการด้วยตนเอง
หลังการประมวลผล:
คัดลอกรหัสรหัสดังต่อไปนี้:
รันไทม์ r=Runtime.getRuntime();
กระบวนการ p=null;
พยายาม{
เส้นทางสตริง = "D:/test.bat";
p = r.exec("cmd.exe /c "+เส้นทาง);
StreamGobbler errorGobbler = StreamGobbler ใหม่ (p.getErrorStream(), "ข้อผิดพลาด");
errorGobbler.start();
StreamGobbler outGobbler = StreamGobbler ใหม่ (p.getInputStream(), "STDOUT");
outGobbler.start();
p.waitFor();
} จับ (ข้อยกเว้นจ) {
System.out.println("ข้อผิดพลาดในการรัน:"+e.getMessage());
e.printStackTrace();
-
คลาส StreamGobbler เป็นดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ com.test.tool;
นำเข้า java.io.BufferedReader;
นำเข้า java.io.IOException;
นำเข้า java.io.InputStream;
นำเข้า java.io.InputStreamReader;
นำเข้า java.io.OutputStream;
นำเข้า java.io.PrintWriter;
-
* ใช้เพื่อจัดการสตรีมข้อผิดพลาดและสตรีมเอาต์พุตที่สร้างโดย Runtime.getRuntime().exec
-
StreamGobbler คลาสสาธารณะขยายเธรด {
InputStream คือ;
ประเภทสตริง;
ระบบปฏิบัติการ OutputStream;
StreamGobbler (InputStream คือประเภทสตริง) {
นี่ (คือ, พิมพ์, null);
-
StreamGobbler (InputStream คือ, ประเภทสตริง, การเปลี่ยนเส้นทาง OutputStream) {
this.is = คือ;
this.type=ประเภท;
this.os = เปลี่ยนเส้นทาง;
-
โมฆะสาธารณะวิ่ง () {
InputStreamReader isr = null;
BufferedReader br = null;
PrintWriter pw = null;
พยายาม {
ถ้า (os != null)
pw = PrintWriter ใหม่ (ระบบปฏิบัติการ);
isr = InputStreamReader ใหม่ (คือ);
br = BufferedReader ใหม่ (isr);
เส้นสตริง=null;
ในขณะที่ ( (line = br.readLine()) != null) {
ถ้า (pw != null)
pw.println(บรรทัด);
System.out.println(พิมพ์ + ">" + บรรทัด);
-
ถ้า (pw != null)
pw.ฟลัช();
} จับ (IOException ioe) {
ioe.printStackTrace();
} ในที่สุด{
พยายาม {
pw.ปิด();
br.ปิด();
isr.ปิด();
} จับ (IOException จ) {
e.printStackTrace();
-
-
-
-
เรียกใช้ค้างคาวและมันจะไม่ถูกบล็อก