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 :

Exécuter un fichier en java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Par défaut Exécuter un fichier en java
    Bonjour,

    Je rencontre actuellement un problème pour lancer un fichier et récupérer son processus pour le surveiller.

    J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("\"" + System.getProperty("java.io.tmpdir") + "test.odt\"");
    ou open(java.io.File file) de la classe Desktop pour exécuter mon fichier.
    Mais il m'est impossible de connaitre le processus créé. Avez vous une solution ?

    Peut-être en passant par de la JNI ? Ou par les thread ?
    Je souhaite récupérer le processus afin de voir quand il se termine et de déclencher une action à ce moment là.

    Merci

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    d'aprè ce que j'ai pu voir sur la JavaDoc:

    - Runtime.exec() retourne une référence vers une instance de Process.
    - Process.waitFor() te permettra de mettre un thread en attente que ton process se termine.

    Logiquement, en faisant:
    - un thread séparé qui va appeler Process.waitFor()
    - quand Process.waitFor() retournera notifier le thread principal que l'exécution de l'application externe s'est terminée

    ... ça devrait te convenir, non ?

    Par contre, je n'ai effectivement pas trouvé d'équivalent pour Desktop.open() (qui retourne void).

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Par défaut
    Quand j'execute cette commande, cela me retourne une erreur, pardon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("\"" + System.getProperty("java.io.tmpdir") + "test.odt\"");
    Ce qui est normal puisque les fichiers .odt ne sont pas des applications.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateProcess error=193, %1 n'est pas une application Win32 valide
    Pour contourner le problème, je passe par l'invité de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd /c" + System.getProperty("java.io.tmpdir") + "test.odt");
    Mais le processus que ca retourne, c'est l'invite de commande et non mon fichier odt. Dès que l'invite de commande est fermé, il me dit que mon processus est fini.

    J'ai déjà essayé ta méthode, mais ce n'est pas suffisant pour ce que je veux faire.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Par défaut
    Workaround trouvé :
    Je lance mon fichier avec la classe Runtime.exec(path); comme je faisais avant
    J'ai pensé qu'il était impossible de détecter la fermeture d'un fichier avec un processus. Hé oui, un fichier n'est pas un processus, c'est le logiciel qui l'ouvre le processus.

    Donc pour savoir si mon fichier est ouvert, je vais implémenter une classe "NotifyWhenClose" composée d'un timer. Je vais boucler toutes les 30 sec pour voir si je peux renommer le fichier (si oui, il est fermé, si non, il est ouvert). Lorsque le fichier est fermé, j'envoie une notification.

    Voila.
    Si ca peut aider du monde.

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

Discussions similaires

  1. Lire, compiler et exécuter un fichier.java
    Par benooo dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 08/06/2013, 12h59
  2. Exécuter un fichier bat avec un programme JAVA
    Par NGeVtC87 dans le forum Général Java
    Réponses: 1
    Dernier message: 08/04/2013, 08h44
  3. Exécuter un fichier .vbs en Java
    Par alma91 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 23/02/2013, 10h32
  4. Obtenir un fichier heapdump pendant l'exécution d'une appli Java
    Par nouknouk dans le forum Général Java
    Réponses: 7
    Dernier message: 14/08/2010, 11h26
  5. [débutant java web] faire exécuter des fichiers .jar coté serveur
    Par Balbuzard dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 01/09/2008, 18h16

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