Utilisez Java pour exécuter la commande bat. Si l'opération bat prend trop de temps, cela peut entraîner des problèmes de blocage et bat ne sera pas exécuté tant que le serveur n'est pas arrêté.
comme:
Copiez le code comme suit :
Exécution r=Runtime.getRuntime();
Processus p = nul ;
essayer{
Chemin de chaîne = "D:/test.bat" ;
p = r.exec("cmd.exe /c "+chemin);
p.waitFor();
}attraper(Exception e){
System.out.println("Erreur d'exécution :"+e.getMessage());
e.printStackTrace();
}
Généralement, l'exécutable de Java ne vous aide pas à résoudre les problèmes de blocage de threads et doit être géré manuellement.
Après traitement :
Copiez le code comme suit :
Exécution r=Runtime.getRuntime();
Processus p = nul ;
essayer{
Chemin de chaîne = "D:/test.bat" ;
p = r.exec("cmd.exe /c "+chemin);
StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");
erreurGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");
outGobbler.start();
p.waitFor();
}attraper(Exception e){
System.out.println("Erreur d'exécution :"+e.getMessage());
e.printStackTrace();
}
La classe StreamGobbler est la suivante :
Copiez le code comme suit :
paquet com.test.tool;
importer java.io.BufferedReader ;
importer java.io.IOException ;
importer java.io.InputStream ;
importer java.io.InputStreamReader ;
importer java.io.OutputStream ;
importer java.io.PrintWriter ;
/**
* Utilisé pour gérer le flux d'erreurs et le flux de sortie générés par Runtime.getRuntime().exec
*/
la classe publique StreamGobbler étend le fil {
InputStream est ;
Type de chaîne ;
Système d'exploitation OutputStream ;
StreamGobbler (InputStream est de type String) {
ceci(est, tapez, null);
}
StreamGobbler (InputStream est, type String, redirection OutputStream) {
ceci.est = est ;
this.type = type;
this.os = redirection ;
}
public void run() {
InputStreamReader isr = null ;
BufferedReader br = null ;
Mot de passe PrintWriter = null ;
essayer {
si (os != nul)
pw = nouveau PrintWriter(os);
isr = nouveau InputStreamReader(est);
br = nouveau BufferedReader(isr);
Ligne de chaîne=null ;
while ( (line = br.readLine()) != null) {
si (pw != nul)
pw.println(ligne);
System.out.println(type + ">" + ligne);
}
si (pw != nul)
pw.flush();
} catch (IOException ioe) {
ioe.printStackTrace();
} enfin{
essayer {
pw.close();
br.close();
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Exécutez bat et il ne sera pas bloqué.