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

Java Discussion :

Programme Java qui exploite un autre programme Java via un Fichier Bat


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut Programme Java qui exploite un autre programme Java via un Fichier Bat
    Bonjour,

    Existant: "Un fichier Bat qui attaque un Fichier Java"
    1. Un programme JAVA "HelloWorld"
    2. Un Fichier Bat qui contient une ligne du genre "java -cp %cp% HelloWorld"
    Donc si on clique 2 fois sur ce fichier Bat il va ouvrir une fenêtre et afficher HelloWorld (normal, c'est l'exécution du fichier java)

    Besoin: "Exploiter le fichier Java depuis un autre programme Java"
    1. Un programme JAVA "HelloWorld"
    2. Un Fichier .Bat qui attaque ce programme Java "HelloWolrd"
    3. Un Nouveau programme java qui doit exploiter le programme java: donc soit attaquer le fichier .bat directement ou bien attaquer le fichier "helloworld",

    Indication:
    1. J'ai pas la main sur le programme initial "HelloWolrd".
    2. Le fichier .bat et le nouveau programme java sont modifiables.

    J'ai effectué un programme java qui attaque les fichier .bat sont problème, mais dés que le fichier .bat contient une ligne du genre "java ....." il se bloque,

    Merci de Votre Aide,

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Tu entends quoi par "attaquer" ?

  3. #3
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Bonjour, quand le fichier .bat est exécuté, il attend la fin du programme Helloworld lancé par la ligne "java -cp %cp% HelloWorld" pour passer à la ligne suivante.

    Si tu veux que ton programme principal et l'ancien programme Helloworld tournent en parallèle, il faut lancer le .bat à partir d'un thread différent.


    Comme le dit dingoth, ça ne répond pas forcément à ton besoin, ça dépend ce que tu veux dire par attaquer :
    - lancer l'ancien programme en parallèle
    - utiliser des ressources communes (fichiers, mémoire...)
    - autre...

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour,

    Connais tu ce que lance la méthode main de ton programme "hello world" ?
    - 1 oui, alors tu met le jar du programme "hello world" dans le path de ton nouveau programme java et tu appels ce qu'il faut.
    - 2 non, alors decompile la class qui possède le main et ensuite fais ce qu'il y a dans le petit 1

    Pour la décompilation je sais c'est mal, mais c'est un bon moyen si tu n'a aucune information sur l'api a appeler.

    Sinon tu peux toujours appeler la méthode main directement sur la class "hello world". Le problème est que si le programme "hello world" lance un System.exit(int) alors tu sortira de ton nouveau programme java !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Points : 317
    Points
    317
    Par défaut
    qu est ce que tu veux dire par "attaquer"?
    Si tu veux utiliser les fonctions de ton premier program java et tu n as pas access a des methodes ou a des class packages.
    Je te conseil de voir la Reflexivite de java pour utiliser des class et acceder a des attributs private et....

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    Merci de Votre Passage,

    Ce que je voulais est simplement exécuter le programme java "HelloWolrd" avec comme ligne dans le bat du genre "java -cp .... helloworld c:\test.txt" pour que je puisse interpréter les résultats,

    Lancer ce bat directement donne les résultats attendus,
    lancer un bat depuis java passe aussi normal,
    mais dés que le bat contient une ligne java ça bloque !
    Je voulais juste le lancer depuis un autre programme java si le bat contient d'autres commande genre (cd, dir, ...) ça marche, mais une fois il arrive à la ligne de java il se bloque !

    Merci,

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu utilises Runtime.exec() pour lancer le bat ?

    Si oui alors un peu de lecture s'impose : Exécuter une application externe en Java


    a++

    PS : Que veux tu faire précisément par ces appels successifs ? Ne serait-il pas mieux d'utiliser directement les classes du premier jar ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut Explication
    Exemple des Fichiers :
    ================

    1. Le fichier "HelloWorld.java"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello world!"); 
        }
    }

    2. Le fichier "test.bat"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cd C:\Program Files\Java\jdk1.6.0_04\bin>
    echo off
    echo //////////////////////////////////////////////
    echo //            HelloWolrd                        // 
    echo /////////////////////////////////////////////
    echo .
    java HelloWolrd > c:\test.txt
    pause

    3. Le Nouveau Fichier Java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String cmd;
    cmd = "cmd /c \"C:\\test.bat\"";
    try {
    Runtime r = Runtime.getRuntime();
    Process p = r.exec(cmd);
    p.waitFor(); //si l'application doit attendre a ce que ce process fini
    }catch(Exception e) {
    System.out.println("erreur d'execution " + cmd + e.toString());

    => Le "nouveau fichier Java" doit lancer le ".bat" ce dernier exécute le programme "HelloWolrd" et le résultat s'enregistre dans le fichier "c:\test.txt" donc je pourrai traiter ce dernier.

    J'ai donné des exemples simple, une fois ça marche je pourrai s'inspirer pour l'adapter a mes besoins,

    Disponible pour plus d'information,

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ton bat fait un pause qui ne recevra jamais aucune touche (puisque tu ne traites pas les flux d'Entrée/Sorties) et bloquera donc à l'infini...


    Citation Envoyé par adiGuba Voir le message
    Si oui alors un peu de lecture s'impose : Exécuter une application externe en Java
    a++

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    Oui, Oui,

    Je viens aussi de le découvrir en postons mon dernier msg,

    Un grand Merci pour vous,

    Le temps de réponse aussi est très remarquable,

    Merci encore une fois,

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    l'Exemple précédent se compile et s'exécute avec succès,

    Dés que je change mon fichier "test.bat" avec un autre contenant :

    ---------------------------------------------------------------
    set cp=%cp%../lib/bdl.jar;
    set cp=%cp%../lib/jxl.jar;
    set cp=%cp%../lib/weblogic.jar;
    .
    .
    set cp=%cp%../lib/lib_pers.jar;

    java -cp %cp% chemin1 chemin2 argument1 > c:\test.txt
    ---------------------------------------------------------------

    il se bloque comme avant (comme s'il attend qqch) ou bien il n'arrive pas a trouvé un chemin,

    Merci de m'indiquer SVP s'il y a une remarque particulière ?

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    On pourrait voir ton code corrigé ?
    Tu ne reçois rien sur les sorties standards ?

    a++

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    Points : 37
    Points
    37
    Par défaut
    J'ai pas changé le Code, c'est seulement le fichier "test.bat" que j'ai modifié,
    Les modifications sont postés au niveau de mon dernier message,

    J'ai effectué quelques test au niveau du fichier batch, c'est la commande "SET ..." qui fait défaut je pense, puisqu'une fois j'ajoute "dir > c:\test.txt" avant la commande "SET ..." le fichier est crée, et lorsque je l'ajoute après le fichiers n'est pas crée,

    Dites moi si vous avez besoin d'autres explications,

    Merci pour votre Disponibilité,

  14. #14
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par compte Voir le message
    J'ai pas changé le Code,
    Mais ton code n'est pas bon puisque tu ne traites pas les entrée/sorties du process, comme je l'ai indiqué dans mon message et comme c'est indiqué dans le tutoriel dont je t'ai donné le lien... sinon tu risques de bloquer les buffer ce qui expliquerait le "blocage"...


    corriges ton code Java !

    a++

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2011, 21h19
  2. Executer un programme .py à partir d'un autre programme .py
    Par manaliac dans le forum Général Python
    Réponses: 2
    Dernier message: 24/08/2010, 15h29
  3. Réponses: 10
    Dernier message: 05/10/2009, 19h00
  4. Programmes/DLL qui utilisent une autre DLL
    Par B.ratak dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/12/2007, 09h23
  5. Réponses: 23
    Dernier message: 30/06/2007, 18h14

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