Используйте Java для выполнения команды bat. Если операция bat занимает слишком много времени, это может вызвать проблемы с блокировкой, и bat не будет выполнен до тех пор, пока сервер не будет выключен.
нравиться:
Скопируйте код кода следующим образом:
Время выполнения r=Runtime.getRuntime();
Процесс p=ноль;
пытаться{
Строковый путь = "D:/test.bat";
p = r.exec("cmd.exe /c "+путь);
п.waitFor();
}catch(Исключение е){
System.out.println("Ошибка выполнения:"+e.getMessage());
е.printStackTrace();
}
Как правило, exec Java не помогает справиться с проблемами блокировки потоков, и его необходимо решать вручную.
После обработки:
Скопируйте код кода следующим образом:
Время выполнения r=Runtime.getRuntime();
Процесс p=ноль;
пытаться{
Строковый путь = "D:/test.bat";
p = r.exec("cmd.exe /c "+путь);
StreamGobbler errorGobbler = новый StreamGobbler(p.getErrorStream(), "ОШИБКА");
ошибкаGobbler.start();
StreamGobbler outGobbler = новый StreamGobbler(p.getInputStream(), "STDOUT");
outGobbler.start();
п.waitFor();
}catch(Исключение е){
System.out.println("Ошибка выполнения:"+e.getMessage());
е.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 расширяет поток {
Входной поток есть;
Строковый тип;
Выходной поток ОС;
StreamGobbler(InputStream, тип String) {
это (есть, тип, ноль);
}
StreamGobbler(InputStream есть, тип String, перенаправление OutputStream) {
this.is = есть;
this.type = тип;
this.os = перенаправление;
}
общественный недействительный запуск () {
InputStreamReader isr = null;
BufferedReader br = ноль;
PrintWriter pw = ноль;
пытаться {
если (ОС != ноль)
pw = новый PrintWriter (ОС);
isr = новый InputStreamReader (is);
br = новый BufferedReader (ISR);
Строковая линия = ноль;
while ( (line = br.readLine()) != null) {
если (pw != ноль)
pw.println(строка);
System.out.println(тип + ">" + строка);
}
если (pw != ноль)
pw.flush();
} catch (IOException ioe) {
ioe.printStackTrace();
} окончательно{
пытаться {
пв.закрыть();
бр.закрыть();
иср.закрыть();
} catch (IOException e) {
е.printStackTrace();
}
}
}
}
Запустите bat и он не заблокируется.