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

API standards et tierces Java Discussion :

API Shell: terminer application externe


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 55
    Par défaut API Shell: terminer application externe
    Bonjour,

    J'ai utilisé l'API Shell pour lancer une application externe depuis mon application JAVA (Runtime.exec ne marchait pas). Mais je ne sais pas comment faire pour terminer l'application externe avec l'API SHELL.

    Si je lance System.exit(0) dans mon programme JAVA, ça ferme mon application JAVA mais pas l'application externe QUE j'ai lancé.

    Pour lancer l'application externe je fais (pas de problème ici):

    sh = new Shell();
    sh.setDirectory(new File(directory)); // Directory est l'adresse du repertoire contenan l'applicationt
    ProcessConsumer p =sh.exec(path); //path contient le chermin absolu du ficher
    p.consumeAsStringInBackground();



    Pour essayer de terminer l'application j'ai essayé sans succès :
    sh.system("exit"); // "exit(0)", "exit 0", "kill"


    Savez vous ce que je dois faire?

  2. #2
    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,

    Citation Envoyé par ToutDroit Voir le message
    Pour essayer de terminer l'application j'ai essayé sans succès :
    sh.system("exit"); // "exit(0)", "exit 0", "kill"
    Normal que cela ne fonctionne pas : chaque appel est indépendant !



    Sinon en théorie il suffit d'annuler la tâche en background pour interrompre le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	Future<String> task = p.consumeAsStringInBackground();
    	...
    	task.cancel(true);

    Maintenant, ca peut dépendre de beaucoup de chose (OS, type d'application, etc.). Donc si ca ne marche pas il faut plus de détail..


    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 55
    Par défaut
    Bonjour,

    merci pour la rapidité de votre réponse.
    Je ne peux pas tester ce soir car l'application est sur mon lieu de travail.
    Je vais essayer votre code demain et j'espère que ça marchera.

    Dans mon cas, l'application à arrêter est une application JAVA (différente de la mienne, mais je la lance via un executable .exe), l'OS est windows (vista ou 7 selon les machines sur lequel je suis) mais l'idéal serait qu'elle marche partout (ex: aussi sur ubuntu).

    Merci encore

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 55
    Par défaut
    Bonjour,

    J'ai testé le code que vous avez indiqué. Mais ça ne marche pas.
    L'application externe reste en exécution.

    Pourtant quand j'appelle la méthode task.isCancelled(), ça me renvoie vraie comme si la tache était bien annulée.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 55
    Par défaut
    Bonjour,

    j'ai résolu mon problème via la commande en passant à la console le nom de mon application:

    Shell sh = new Shell
    sh.system("taskkill /IM monApplication.exe"); // solution pour windows


    Je pense que je vais écrire l'équivalent linux,
    et faire en sorte choisir le bon code à exécuter via un System.getProperties. (pour savoir si je suis sous Windows ou Linux)

    Ça me semble être un peu du bricolage, et je voudrais savoir si il y a des cas où une telle commande pourrait poser problèmes et si il y a une meilleure solution.

  6. #6
    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
    Je viens de faire un essai, et il semble que c'est la lecture du flux de sortie du process qui n'est pas interruptible. Donc le cancel est ignoré...


    Que fait-tu avec ce process ? Tu as besoin de lire sa sortie ?


    Sinon il faudrait passer par ProcessBuilder pour lancer le process (et donc pouvoir l'arrêter via destroy()).


    a++

Discussions similaires

  1. Terminer une application externe.
    Par JJJJJ dans le forum Langage
    Réponses: 14
    Dernier message: 24/12/2009, 13h06
  2. API getfocus pour application externe
    Par ramanov dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 09/08/2009, 17h35
  3. Exécution application externe shell AppActivate
    Par Nico_stras dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/08/2007, 12h07
  4. [API][Système] Appel d'une application externe via java
    Par Tasslekender dans le forum Général Java
    Réponses: 2
    Dernier message: 17/03/2006, 14h13
  5. [API] Lancer une application externe via un code Java
    Par k o D dans le forum Général Java
    Réponses: 19
    Dernier message: 09/03/2006, 15h12

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