Gunakan Java untuk menjalankan perintah bat. Jika operasi bat memakan waktu terlalu lama, hal ini dapat menyebabkan masalah pemblokiran, dan bat tidak akan dijalankan hingga server dimatikan.
menyukai:
Copy kode kodenya sebagai berikut:
Waktu Proses r=Waktu Proses.getRuntime();
Proses p=null;
mencoba{
Jalur string = "D:/test.bat";
p = r.exec("cmd.exe /c "+jalur);
p.tunggu();
}menangkap(Pengecualian e){
System.out.println("Jalankan kesalahan:"+e.getMessage());
e.printStackTrace();
}
Umumnya, exec Java tidak membantu Anda mengatasi masalah pemblokiran thread, dan perlu ditangani secara manual.
Setelah diproses:
Copy kode kodenya sebagai berikut:
Waktu Proses r=Waktu Proses.getRuntime();
Proses p=null;
mencoba{
Jalur string = "D:/test.bat";
p = r.exec("cmd.exe /c "+jalur);
StreamGobbler errorGobbler = StreamGobbler baru(p.getErrorStream(), "ERROR");
errorGobbler.mulai();
StreamGobbler outGobbler = StreamGobbler baru(p.getInputStream(), "STDOUT");
outGobbler.mulai();
p.tunggu();
}menangkap(Pengecualian e){
System.out.println("Jalankan kesalahan:"+e.getMessage());
e.printStackTrace();
}
Kelas StreamGobbler adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
paket com.test.tool;
impor java.io.BufferedReader;
impor java.io.IOException;
impor java.io.InputStream;
impor java.io.InputStreamReader;
impor java.io.OutputStream;
impor java.io.PrintWriter;
/**
* Digunakan untuk menangani aliran kesalahan dan aliran keluaran yang dihasilkan oleh Runtime.getRuntime().exec
*/
kelas publik StreamGobbler memperluas Thread {
Aliran Masukan adalah;
Jenis string;
Aliran Keluaran os;
StreamGobbler(InputStream adalah, tipe String) {
ini(adalah, ketik, nol);
}
StreamGobbler(InputStream adalah, tipe String, pengalihan OutputStream) {
ini.is = adalah;
this.type = mengetik;
this.os = pengalihan;
}
menjalankan kekosongan publik() {
InputStreamReader isr = nol;
BufferedReader br = nol;
Penulis Cetak pw = null;
mencoba {
jika (os != nol)
pw = Penulis Cetak baru(os);
isr = InputStreamReader baru(adalah);
br = BufferedReader baru(isr);
Garis string=null;
while ( (baris = br.readLine()) != null) {
jika (pw != nol)
pw.println(baris);
System.out.println(ketik + ">" + baris);
}
jika (pw != nol)
pw.siram();
} tangkapan (IOException ioe) {
ioe.printStackTrace();
} Akhirnya{
mencoba {
pw.tutup();
br.close();
isr.close();
} tangkapan (IOException e) {
e.printStackTrace();
}
}
}
}
Jalankan bat dan itu tidak akan diblokir.