Communication entre processus

Résolu
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012 - 2 juil. 2012 à 13:42
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012 - 2 juil. 2012 à 15:58
Bonjour à tous et à toutes, je ne savais pas trop où poster ma demande, ni quel titre lui donner (c'est probablement pour ça que google n'a pas réussi à m'aider)

Je cherche à coder un Applet Java me permettant de gérer depuis n'importe où mon serveur MineCraft !
Il m'est facile de lancer des sauvegardes, modifier les fichiers de propriétés du serveur, mais, ce que je ne sais absolument pas faire, c'est parler à l'invite de commande du serveur MineCraft.

Une fois lancé en console, on peut lui dire "stop" "msg x salut" etc, (la syntaxe des commandes, osef en fait)
Bref, j'aimerai savoir si, depuis un programme Java (celui là tournera à coté du serveur minecraft), je peux "injecter" des entrées dans le programme du serveur MineCraft ? (en gros, qu'il ne lise pas sur System.in, ou bien que moi je puisse écrire sur System.in depuis mon autre programme Java)

Je précise que je compte lancer le serveur MineCraft depuis mon programme, donc, j'aurai accès à son instance Process

12 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
2 juil. 2012 à 15:50
histoire d'être sur, moi j'ai rajouter
JOptionPane.showMessageDialog(null, "Repeat is started");

comme première ligne de la class repeat...

de plus, j'ai packager l'application en un jar que je lance via la commande exec:
Runtime.getRuntime().exec("java -jar repeat.jar");

et ça marche sans le moindre soucis...
3
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012
2 juil. 2012 à 13:46
Je sais comment récupérer l'OutPutStream d'un Process, et l'afficher, j'ai essayé l'InputStream, et ça n'a pas vraiment fonctionné ?
Etait-ce au moins la bonne voix ?
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
2 juil. 2012 à 14:08
Salut,

Comme ça, je t'aurai justement conseillé de passer par les différents stream du process...

que voulais tu dire par "ça n'a pas vraiment fonctionné"?
0
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012
2 juil. 2012 à 14:10
Bah, j'ai récupéré l'InputStream d'un processus (un autre programme java qui répète juste ce qu'on lui écrit, pour le test)
et j'ai écrit dedans avec un write, et l'autre processus ne semble avoir rien reçu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
2 juil. 2012 à 14:22
tu as fait un flush après avoir écrit?
0
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012
2 juil. 2012 à 14:27
Oui, voici mes deux fichiers:

repeat:
import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 *
 * @author asorg
 */
public class repeat 
{
    public static void main(String[] onche)
    {
        Scanner sc = new Scanner(System.in);
        String msg = "";
        while( !msg.equals("stop") )
        {
            msg = sc.next();
            JOptionPane.showMessageDialog(null, msg, "Message", JOptionPane.INFORMATION_MESSAGE);
        }
    }
}


write:
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Scanner;

/**
 *
 * @author asorg
 */
public class write 
{
    public static void main(String[] onche) throws IOException
    {
        Process p = Runtime.getRuntime().exec("java D:\\Donnees\\Stage\\repeat");
        OutputStream out = p.getOutputStream();
        PrintWriter pw = new PrintWriter(out);
        Scanner sc = new Scanner(System.in);
        String msg = "";
        while( !msg.equals("stop") )
        {
            msg = sc.next();
            pw.write(msg);
            pw.flush();
        }
    }
}
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
2 juil. 2012 à 14:54
apres test, en effet, il y a un petit soucis...

comme ça je n'ai pas trouvé la cause exacte, mais si tu remplaces la ligne pw.write(pw); de ta classe write par pw.println(pw); chez moi, cela fonctionne...
0
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012
2 juil. 2012 à 15:01
Comme ceci ?
Chez moi, toujours pas de fenêtre qui s'affiche pour me répéter mon message :/

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Scanner;

/**
 *
 * @author asorg
 */
public class write 
{
    public static void main(String[] onche) throws IOException
    {
        Process p = Runtime.getRuntime().exec("java D:\\Donnees\\Stage\\repeat");
        OutputStream out = p.getOutputStream();
        PrintWriter pw = new PrintWriter(out);
        Scanner sc = new Scanner(System.in);
        String msg = "";
        while( !msg.equals("stop") )
        {
            msg = sc.next();
            pw.println(msg);
            pw.flush();
        }
    }
}
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
2 juil. 2012 à 15:20
personnellement j'ai aussi (évidemment) modifié la ligne de commande pour lancé Repeat...
es-tu sur que ton process est lancé?
0
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012
2 juil. 2012 à 15:23
J'y ai pensé avant, j'ai mis mon fichier repeat.class à coté mon write.class, comme ça je suis sur qu'il n'y a aucune raison que cela ne fonctionne pas
0
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012
2 juil. 2012 à 15:25
Bon, en faisant CTRL+C pour quitter l'invite de commande, il m'a affiché d'un coup tous les messages que j'avais écrit ...
0
lossehelin Messages postés 51 Date d'inscription jeudi 10 mai 2012 Statut Membre Dernière intervention 5 juillet 2012
2 juil. 2012 à 15:58
Je viens de voir, j'ai écrit print au lieu de println, je crois que du coup il n'envoyait rien, malgré le flush !

J'ai testé avec un .class et un .jar, les deux fonctionnent correctement maintenant ! :)
Il reste à voir si ça fonctionnera aussi correctement avec le serveur MineCraft :).
0
Rejoignez-nous