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.

Author: John Kugelman, 2020-06-12

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).

 0
Author: , 2020-06-12 05:12:18

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 ()

 0
Author: fenswtich, 2020-06-12 15:45:22