IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Exécuter une application Java à partir d'un programme Java


Sujet :

avec Java

  1. #1
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut Exécuter une application Java à partir d'un programme Java
    Bonjour à vous. Mon but est de faire une interface qui va exécuter un programme ligne de console qui est lui aussi en Java et dans le même Jar.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Starter {
    	public static void main(String[] args) {
    		System.out.println("Je vais démarrer l'autre programme");
                    // Démarrer le programme Started
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Started {
    	public static void main(String[] args) {
    		System.out.println("Je suis celui démarré par l'autre");
    	}
    }
    J'ai vu qu'on pouvait appeler getRuntime().exec("programme.exe") , mais c'est pour démarrer un programme et non une classe Java.

    Merci

  2. #2
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,
    main est une méthode public et static, donc tu n'as qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Starter {
    	public static void main(String[] args) {
    		System.out.println("Je vais démarrer l'autre programme");
                    Started.main(args);
    	}
    }

  3. #3
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    Je ne crois pas que ça va créer un second processus. Je dois aussi être capable de recevoir ce qu'il écrira normalement sur une console dans un pipe pour pouvoir l'afficher dans une zone de texte dans mon interface.

  4. #4
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    et ceci??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("java ClasseAExecuter");
    hmmm... apparemment c'est pas le bon choix!!

  5. #5
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    Je viens d'essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    import java.io.IOException;
    import java.io.InputStream;
     
    public class Starter {
    	public static void main(String[] args) {
    		System.out.println("Je vais démarrer l'autre programme");
     
    		Process myProcess = null;
     
    		try {
    			myProcess = Runtime.getRuntime().exec("java Started");
    		} catch (IOException e) {
    			e.printStackTrace();
    			return;
    		}
     
    		InputStream myIn = myProcess.getInputStream();
     
    		while (true) {
    			try {
    				System.out.write(myIn.read());
    				System.out.flush();
    			} catch (IOException e) {
    				e.printStackTrace();
    				return;
    			}
    		}
    	}
    }
    Et ça affiche juste le message du premier programme. J'ai beau écrire n'importe quoi comme "Java blabla" et ça donne le même résultat.

    Si je met ""cmd /C dir" alors là je vois le listing. Donc c'est vraiment le "Java Started" qui a de la misère.

    J'ai essayé de faire une boucle dans l'autre programme pour qu'il écrive d'autres trucs sans arrêts au cas où le premier programme n'aurait pas eu le temps de pogner le pipe assez vite, mais non, ca affiche toujours rien.

  6. #6
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,
    il faudra récupérer l'inputstream de l'autre main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Process p = Runtime.getRuntime().exec("java ClassToRun");
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

  7. #7
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    La solution la plus élégante que j'ai trouvé est de :
    - Faire un Thread et exécuter la classe (étant donné que c'est dans le même Jar)
    - Modifier le PrintStream de System Out pour obtenir ce que ce programme écrit à la console (étant donné que je fais une interface graphique et qu'elle n'écrit pas dans System.out)

    Si des gens ont d'autres solutions, elles sont les bienvenue

  8. #8
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 552
    Points : 15 463
    Points
    15 463
    Par défaut
    As tu accès aux code des deux programmes?

    Si oui la solution la plus élégante est de modifier le programme appelé pour qu'il accepte un paramètre (par exemple "-nogui") qui permettrait de ne pas afficher cet écran de connexion. Ce paramètre lui serait passé lors de l'appel par le programme lanceur.

    Si tu n'as pas accès au code, tu pourrais éventuellement faire valider automatiquement ce formulaire de connexion via la classe java.awt.Robot mais ça serait du bricolage.

  9. #9
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    J'ai effectivement accès au code source des deux puisque mon but était d'avoir deux points d'entrés différents (un console et l'autre interface graphique) pour effectuer les tâches.

    Le programme console que je veux appeler n'a pas d'interface graphique. C'est pourquoi je fais une autre entrée dans le programme qui elle est en mode graphique et elle va appeler le programme console.

    Malgré cela, tu viens de me donner l'idée de faire une seule entrée dans le programme qui elle choisirait de faire un interface graphique ou console selon les paramètres donnés. Dans mon cas, c'est une excellente idée puisque ça simplifie beaucoup d'avoir une seule porte d'entrée dans le programme.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécuter un fichier Kermeta à partir d'un programme Java
    Par naddouchIHM dans le forum Eclipse
    Réponses: 6
    Dernier message: 13/07/2013, 13h40
  2. exécuter une application a partir
    Par yLaplace dans le forum Forms
    Réponses: 0
    Dernier message: 09/09/2011, 14h43
  3. exécuter une application a partir
    Par yLaplace dans le forum Forms
    Réponses: 4
    Dernier message: 08/09/2011, 10h27
  4. Réponses: 1
    Dernier message: 12/06/2009, 12h42
  5. Réponses: 3
    Dernier message: 14/09/2007, 20h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo