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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    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 Expert
    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
    Par défaut
    Tu entends quoi par "attaquer" ?

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    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
    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 expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    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
    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
    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
    Expert éminent
    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
    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++

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    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,

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 73
    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,

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