Use Java para executar o comando bat. Se a operação bat demorar muito, poderá causar problemas de bloqueio e o bat não será executado até que o servidor seja desligado.
como:
Copie o código do código da seguinte forma:
Tempo de execução r=Runtime.getRuntime();
Processo p=nulo;
tentar{
String caminho = "D:/test.bat";
p = r.exec("cmd.exe /c "+caminho);
p.waitFor();
}catch(Exceção e){
System.out.println("Erro de execução:"+e.getMessage());
e.printStackTrace();
}
Geralmente, o exec do Java não ajuda a lidar com problemas de bloqueio de threads e precisa ser tratado manualmente.
Após o processamento:
Copie o código do código da seguinte forma:
Tempo de execução r=Runtime.getRuntime();
Processo p=nulo;
tentar{
String caminho = "D:/test.bat";
p = r.exec("cmd.exe /c "+caminho);
StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERRO");
erroGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");
outGobbler.start();
p.waitFor();
}catch(Exceção e){
System.out.println("Erro de execução:"+e.getMessage());
e.printStackTrace();
}
A classe StreamGobbler é a seguinte:
Copie o código do código da seguinte forma:
pacote com.test.tool;
importar java.io.BufferedReader;
importar java.io.IOException;
importar java.io.InputStream;
importar java.io.InputStreamReader;
importar java.io.OutputStream;
importar java.io.PrintWriter;
/**
* Usado para lidar com o fluxo de erros e o fluxo de saída gerado por Runtime.getRuntime().exec
*/
classe pública StreamGobbler estende Thread {
InputStream é;
Tipo de sequência;
OutputStream os;
StreamGobbler(InputStream é, tipo String) {
isto(é, tipo, nulo);
}
StreamGobbler(InputStream é, tipo String, redirecionamento OutputStream) {
isto.é = é;
este.tipo = tipo;
isto.os = redirecionamento;
}
execução void pública() {
InputStreamReader isr = null;
BufferedReader br = null;
PrintWriter pw = nulo;
tentar {
if (os! = nulo)
pw = novo PrintWriter(os);
isr = novo InputStreamReader(é);
br = novo BufferedReader(isr);
String linha=nulo;
while ( (linha = br.readLine()) != null) {
if (pw! = nulo)
pw.println(linha);
System.out.println(tipo + ">" + linha);
}
if (pw! = nulo)
pw.flush();
} catch (IOException ioe) {
ioe.printStackTrace();
} finalmente{
tentar {
close();
close();
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Execute bat e ele não será bloqueado.