Communication entre processus [Résolu]

lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 13:42 - Dernière réponse : lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention
- 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
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 2 juil. 2012 à 15:50
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...

Merci cormandyr 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de cormandyr
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 13:46
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
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 2 juil. 2012 à 14:08
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
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 14:10
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
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 2 juil. 2012 à 14:22
0
Merci
tu as fait un flush après avoir écrit?
Commenter la réponse de cormandyr
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 14:27
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
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 2 juil. 2012 à 14:54
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
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 15:01
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
cormandyr 600 Messages postés samedi 20 mai 2006Date d'inscription 8 juillet 2016 Dernière intervention - 2 juil. 2012 à 15:20
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
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 15:23
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
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 15:25
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
lossehelin 51 Messages postés jeudi 10 mai 2012Date d'inscription 5 juillet 2012 Dernière intervention - 2 juil. 2012 à 15:58
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.