Communication entre processus [Résolu]

Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
- - Dernière réponse : lossehelin
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
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
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Dernière intervention
8 juillet 2016
3
Merci
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...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cormandyr
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
0
Merci
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 ?
Commenter la réponse de lossehelin
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Dernière intervention
8 juillet 2016
0
Merci
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é"?
Commenter la réponse de cormandyr
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
0
Merci
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
Commenter la réponse de lossehelin
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Dernière intervention
8 juillet 2016
0
Merci
tu as fait un flush après avoir écrit?
Commenter la réponse de cormandyr
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
0
Merci
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();
        }
    }
}
Commenter la réponse de lossehelin
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Dernière intervention
8 juillet 2016
0
Merci
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...
Commenter la réponse de cormandyr
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
0
Merci
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();
        }
    }
}
Commenter la réponse de lossehelin
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Dernière intervention
8 juillet 2016
0
Merci
personnellement j'ai aussi (évidemment) modifié la ligne de commande pour lancé Repeat...
es-tu sur que ton process est lancé?
Commenter la réponse de cormandyr
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
0
Merci
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
Commenter la réponse de lossehelin
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
0
Merci
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 ...
Commenter la réponse de lossehelin
Messages postés
51
Date d'inscription
jeudi 10 mai 2012
Dernière intervention
5 juillet 2012
0
Merci
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 :).
Commenter la réponse de lossehelin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.