utilisation de java pour manipuler une entrée/sortie de serveur minecraft
J'essaie de gérer mon serveur minecraft via java mais même si je peux lire les sorties facilement, je n'arrive pas à obtenir des commandes ou même du texte dans:
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd C:\\my\\path\\ && java -jar server.jar nogui");
builder.redirectErrorStream(true);
Process p;
p = builder.start();
this.p = p;
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (loop) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
Cela fonctionne très bien mais quand j'essaie d'envoyer des commandes, cela ne fonctionne pas du tout:
OutputStream os = BotData.minecraftServer.getOutputStream();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os));
String stop = "stop";
try {
out.write(stop + "\n");
out.write("\n");
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
J'ai essayé avec "Command:>>" + stop + "\n"
avec ou sans /
avant stop
etc.
Tuer le processus, de force ou non, le démarrer dans un thread que j'arrêterais ensuite...
Je ne peux faire fonctionner ni le texte ni les commandes.
2 answers
Le document indique que les commandes de cmd doivent être accompagnées d'un premier /
.
Essayez d'envoyer /stop
au lieu de stop
.
Attention également, la ligne line = r.readLine();
peut ne jamais renvoyer un null
tant que le processus est vivant(par défaut).
OK l'a trouvé, il est nécessaire d'utiliser write() newline() puis flush() pour envoyer quoi que ce soit à la console.
Mon deuxième problème était une référence morte à mon processus.
Détruire le processus ne fonctionne pas, mais la commande stop le fait.
Utiliser / est inutile, \n ne remplace pas newline ()