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

Langage Java Discussion :

Java et programme externe


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut Java et programme externe
    Bonjour ,

    Voila j'utilise in programme externe en java pour me générer un fichier (pdf) puis je l'utilise dans la suite de mon programme. J'utilise la fonction exec() mais il y a un petit soucis qui se pose 4 fois sur 5 : quand j'essaie d'utiliser le fichier celui-la n'est pas encore crée et ça fait des erreurs.
    J'ai essayer de faire un truc de genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     p=  rn.exec(macro);
    int waitFor = p.waitFor();
    Mais c'est pareil !
    Une idée serait de faire dormir le thread courrant avec sleep(). Ca marche mais si je traite un nombre considerable de fichier le temps d'execution est trop long .
    Une boucle tant "fichier n'existe pas" tue les ressources systemes pour rien .
    Alors que faire ?

    Je vous remercie d'avance .

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    p.waitFor() rend la main quand le processus est terminé, donc c'est que ton processus doit lancer un autre processus

    Pourquoi appeler un programme Java depuis Java ? Autant appeler la classe Main directement
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Pourquoi appeler un programme Java depuis Java ? Autant appeler la classe Main directement
    Mais de quoi tu parles ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    Citation Envoyé par Nemek Voir le message
    p.waitFor() rend la main quand le processus est terminé, donc c'est que ton processus doit lancer un autre processus
    heu... comment dire ... t'es sur que tu sais de quoi tu parles ?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    oui, p.waitFor() attends que le processus ciblé soit terminé. Si il termine et que le pdf n'est pas généré, c'est que ce n'est pas lui qui génère le pdf.

    De plus, on a pas la moindre idée de ce que vous mettez dans macro...

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Citation Envoyé par morofiler Voir le message
    programme externe en java
    Citation Envoyé par morofiler Voir le message
    Mais de quoi tu parles ?
    Tu as un programme Java qui lance un programme externe en Java.

    Citation Envoyé par morofiler Voir le message
    heu... comment dire ... t'es sur que tu sais de quoi tu parles ?
    euh ... comment dire ... c'est pas moi qui poses les questions :p
    Il suffit de consulter la documentation. En prime tu as la valeur de retour de ta commande

    Si tu as besoin d'attendre quelques millisecondes, tu peux essayer avec yield

    PS : pas la peine de faire plusieurs messages, il y a la fonction EDIT Et pour quoter plusieurs messages il y a l'icône
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Tu as un programme Java qui lance un programme externe en Java.
    Là je me suis mal exprimé ,ce que je voulais dire c'est que c'est mon programme java qui lance qui une commande externe .
    Désolé

    euh ... comment dire ... c'est pas moi qui poses les questions :p
    Il suffit de consulter la documentation. En prime tu as la valeur de retour de ta commande
    Je teste bien evidemment la valeur de retour (c'est quand meme basique meme si je ne l'ai pas mis dans l'exemple de code que j'ai donné)
    Elle est toujours à 0 ,la commande se termine donc bien .
    Comme je l'ai dit plus haut je pense qu'il y a un delai d'ecriture sur le disque.

    Si tu as besoin d'attendre quelques millisecondes, tu peux essayer avec yield
    C'est une assez bonne idée sauf quand ne peut savoir exactement quand le thread se reveillera.
    Meme sans ça j'ai fait quelques test et le temps d'attente va de 0.3 sec à 3 sec ce qui fait quand meme beaucoup si j'ai beaucoup de fichiers.

    PS : pas la peine de faire plusieurs messages, il y a la fonction EDIT Et pour quoter plusieurs messages il y a l'icône
    Je dois avouer...:

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    oui, p.waitFor() attends que le processus ciblé soit terminé. Si il termine et que le pdf n'est pas généré, c'est que ce n'est pas lui qui génère le pdf.

    De plus, on a pas la moindre idée de ce que vous mettez dans macro...
    Si si le pdf est bien généré et c'est bien lui qui le fait ( je l'ai ecrite moi-meme la macro et tres bien testée ). Le probleme c'est que quand mon deuxieme appel à exec() le pdf n'est pas encore écrit sur le disque.

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    comme on dit, et on el repéte, si waitfor sort avant que le pdf soit généré, c'est que ce n'est pas le processus créé qui génère le pdf , mais un autre processus créé par celui-ci. Et tu n'a aucune controle possible sur ceux-ci, il faut revoir la manière dont tu génère ce pdf.

    Comme on a pas la moindre idée de ce que tu met dans exec().....

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Par défaut
    Je te propose mon code et tu comprendras j'ai un peu simplifié les choses dans mon message .

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     private String[] macro =new String [2];
    private String[] command =new String [2];
    macro[0]="prog1";
    macro[1]=file;
    command[0]="prog2";
    command[1]=file;
     
     
     public void do() {
            try {
                do1();
                do2();
     
            } catch (IOException ex) {
                Logger.getLogger(Exec.class.getName()).log(Level.SEVERE, null, ex);
            }
     
         }
     
            public void do1() throws IOException{
      p=  rn.exec(macro);
                try {
                    int waitFor = p.waitFor();
                } catch (InterruptedException ex) {
                    Logger.getLogger(Exec.class.getName()).log(Level.SEVERE, null, ex);
                }
      //System.out.println(p.exitValue());
         }
     
            public void do2) throws IOException{
     
                 p = rn.exec(command);
     try {
                     nt waitFor = p.waitFor();
     
                }
                 catch (InterruptedException ex) {
                    Logger.getLogger(Exec.class.getName()).log(Level.SEVERE, null, ex);
                }
     
                   }
          }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2011, 15h18
  2. lancer et controler un programme externe en java
    Par mouhab dans le forum Langage
    Réponses: 1
    Dernier message: 25/08/2009, 16h51
  3. Intégrer un programme externe dans une application java
    Par NiKoMinus dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 30/11/2008, 19h29
  4. Invoquer un programme externe C et l'arrêter avec JAVA
    Par MrMust dans le forum Général Java
    Réponses: 13
    Dernier message: 03/10/2008, 00h15
  5. appel programme externe depuis pl/sql
    Par txouki dans le forum PL/SQL
    Réponses: 6
    Dernier message: 11/05/2004, 18h35

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