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

Entrée/Sortie Java Discussion :

Lancer un programme java depuis un programme java [FAQ]


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Lancer un programme java depuis un programme java
    Bonjour !
    Voila, j'ai un nouveau problème: je souhaite lancer depuis un programme principal un autre programme que j'avais dejà réalisé.

    J'ai regardé ici : http://ydisanto.developpez.com/tutoriels/j2se/runtime/
    mais je me demandais s'il n'y avait pas plus simple et surtout si cela fonctionnait quelque soit l'OS utilisé ?

    Merci par avance.
    @Bientôt !

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Salut,

    Citation Envoyé par TheBAT
    mais je me demandais s'il n'y avait pas plus simple

    Au plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClassePrincipaleDeTonAutreProg.main(null);
    tu remplace null par un tableau de String si il y a des paramètres à lui passer.

    Par contre, il faut voir si ça ne bloque pas le programme lanceur...
    Et je ne sais pas si c'est très très propre comme méthode...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Cela fonctionne parfaitement, merci.
    Sais-tu si je peux faire la meme chose si l'application à lancer n'est pas dans le même repertoire que l'application qui lance ce programme ?

    En faisant un import je n'ai pas d'erreur à la compilation mais le programme ne se lance pas...

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par TheBAT
    Cela fonctionne parfaitement, merci.
    Sais-tu si je peux faire la meme chose si l'application à lancer n'est pas dans le même repertoire que l'application qui lance ce programme ?

    En faisant un import je n'ai pas d'erreur à la compilation mais le programme ne se lance pas...
    C'est pas un import qu'il faut faire... c'est rajouter le répertoire de la seconde application dans le classpath de la première.

    Un import, c'est pour préciser au compilateur dans quels packages trouver les classes que l'on utilise dans le code, et éviter de les taper à chaque fois qu'on utilise les classes (genre, un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import javax.swing.JFrame;
    permet d'éviter de retaper:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.swing.JFrame maJFrame=new javax.swing.JFrame();
    et de taper à la place:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JFrame maJFrame=new JFrame();
    ) mais ça ne dit pas à la machine virtuelle où trouver les fameux packages sur ton disque. Ca, c'est le rôle du classpath.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    d'après ce que j'ai pu lire et comprendre il faudrait modifier ma façon de lancer le programme en faisant par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java maClasseALancer -classpath ./RepDeMonProgrAIntergrer
    mais cela ne fonctionne toujours pas : lancement du programme mais pas du "sous-programme".

    Je ne veux pas modifier la variable CLASSPATH car je ne pourrais pas le faire sur toutes les machines avant de lancer mon applciation...

    ps: merci bien pour ton aide en tout cas !

  6. #6
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par TheBAT
    Je ne veux pas modifier la variable CLASSPATH car je ne pourrais pas le faire sur toutes les machines avant de lancer mon applciation...
    tu peux modifier le classpath en le passant en argument à la commande java au lancement de ton programme.

    Et si ça plante, c'est que ton classpath n'est pas bon. Et que normalement tu as un message d'erreur en prime...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Tu peux "charger" ton autre application sans toucher au classpath de ta première application.
    Il faut pour cela utiliser un URLClassLoader.
    Il te suffit juste de connaitre le chemin du jar de ton autre application.
    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
     
    // Chargement du jar
    String path = "chemin/autreappli.jar";
    File file = new File(path);
    URL[] urls = { file.toURL() };
    ClassLoader cl = new URLClassLoader(urls, getClass().getClassLoader());
     
    // Récupération de la classe principale
    Class<?> c = cl.loadClass("ClassePrincipaleDeTonAutreProg", true);
     
    // Récupération de la méthode "main(String[] args)"
    String[] params = {}; // Si tu as des paramètres ->  String[] params = { "param1", "param2", ...};
    Method m = c.getMethod("main", params.getClass());
     
    // Lancement de la méthode "main"
    m.invoke(null, (Object) params);
    Je te laisse le soin de gérer les exceptions ^^
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. Executer un programme RPG depuis une classe JAVA
    Par AnneCa dans le forum JDBC
    Réponses: 3
    Dernier message: 18/02/2018, 12h14
  2. lancer une fonction MATLAB depuis un code Java
    Par Gouasmi_moh dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 23/04/2011, 18h00
  3. Réponses: 3
    Dernier message: 17/01/2009, 20h47
  4. Lancer un script depuis un programme Java
    Par loulag07 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 06/05/2008, 14h51
  5. Lancer un programme c depuis java dans une console
    Par moise44 dans le forum Général Java
    Réponses: 5
    Dernier message: 04/04/2006, 20h04

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