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

avec Java Discussion :

Séparer un process du main


Sujet :

avec Java

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut Séparer un process du main
    Salut tous le monde,

    J'ai un petit souci concernant mon code. Je souhaite lancer une application externe (ce que je parviens a faire avec le code plus bas) mais mon souci viens du fait que le main ne se termine pas tant que mon programme externe ne s'est pas terminé c'est a dire qu'il reste en etat "blocked" au niveau de l'accolade le fermant.
    Mon programme externe doit en permanence resté ouvert meme apres l'execution de mon main.

    Si quelqu'un aurait une solution. merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Process proc = null;
    try {
    Runtime r = Runtime.getRuntime();
    Process p = r.exec("c:\\pyxvital\\pyxvital.exe");
    //proc = new ProcessBuilder("c:\\pyxvital\\pyxvital.exe").start();
    } catch (Exception e){ e.printStackTrace(); }

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Points : 93
    Points
    93
    Par défaut
    S'il est exécuté en permanence est-ce que c'est logique qu'il soit lancé par le main ? Que se passe-t-il si je relance le main après qu'il se soit terminé ? Ne vaut-il pas mieux empêcher le main de se terminer tant que le programme externe est en cours ?

  3. #3
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par Yonito Voir le message
    mon souci viens du fait que le main ne se termine pas tant que mon programme externe ne s'est pas terminé c'est a dire qu'il reste en etat "blocked" au niveau de l'accolade le fermant.
    Je ne comprends pas trop ce que tu veux dire? Tu veux dire que le thread ayant faire le exec ne s'arrête pas? Ou tu veux dire que ton programme ne quitte pas? Il y a quoi dans ton Thread (méthode run()) dans le cas numéro 1? Tu peux nous donner l'intégralité de ton main dans le cas numéro 2 ?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Je ne comprends pas trop ce que tu veux dire? Tu veux dire que le thread ayant faire le exec ne s'arrête pas? Ou tu veux dire que ton programme ne quitte pas? Il y a quoi dans ton Thread (méthode run()) dans le cas numéro 1? Tu peux nous donner l'intégralité de ton main dans le cas numéro 2 ?
    Mon programme (main) ne quitte pas.
    En faite ceci va etre une applet qui a son premier lancement dans la journée sera charger de lancer une application externe qui devra rester ouverte en permanence jusqu'a l'arret de l'ordinateur.
    Je l'ai juste ecrit en application normal parce que c'est plus confortable pour moi. Mais ce comportement est le meme en applet.

    -Dici-

    Si je relance le main, la suite du code est de verifier si le process est deja lancé (qui n'est pas chose evidente d'apres ce que j'ai vu sur les forums).

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Tester
    {
    	public static void main(String[] args)
    	{
    		Process proc = null;
    		try {
    			Runtime r = Runtime.getRuntime();
    			Process p = r.exec("c:\\pyxvital\\pyxvital.exe");
    			//proc = new ProcessBuilder("c:\\pyxvital\\pyxvital.exe").start();
    		} catch (IOException e){ e.printStackTrace(); }
     
    	}
     
    }

  5. #5
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Il y a un différence entre une applet et une application standalone.

    Une application standalone se termine dès que tous ses Thread non daemon son terminés.
    Une applet se termine quand le navigateur décide de la décharger, la jvm qui a chargé l'applet se termine en général à la fermeture du navigateur.

    Pour ce qui est de java qui ne termine pas, c'est probablement eclipse qui te donne cette impression. Apparement, eclise attends la fermeture de l'application que tu as lancée (la jvm) et tous ses child process , mais la jvm qu'il a lancée au départ s'est bien arrêtée. Si tu lance le Taskmanager de windows, et que tu rajoute des sleep dans ton code, tu verra bien le process javaw.exe apparaitre et puis disparaitre (bien qu'eclipse soit toujours en attente).

    J'ai fait mes tests en lançant notepad
    Je rajoute que faire une applet chargée de démarrer un démon, c'est vraiment pas propre ^^

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut
    Quand je lance l'applet, elle lance bien mon programme externe mais l'applet en elle meme ne se termine pas, elle reste ouverte (ce que je veux eviter).
    Les autres applets de l'application elle se ferme des qu'elles ont fini ce qu'elles ont a traiter et non pas forcement a la fermeture du navigateur internet.

    En faite je voudrai juste que le programme externe soit entierement independant de l'applet.

    Y'a t'il une autre solution de lancer l'application externe? En evitant de le faire par une tache planifiee.

    Le choix s'est fait de le faire par une applet car il nous permettra d'intervenir sur l'applet en elle meme pour configurer le programme externe (en cas de modification ou simplement pour l'installation du programme la premiere fois) et non pas de passer sur chaque poste pour la configuration dans le cas ou cela se ferait par un bat.

    merci

  7. #7
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Tu peux définir "applet se termine"? comment tu qualifie ça? Comment tes autres applets se finissent? Puisqu'à ma connaissance, une applet ne peux pas choisir de finir, c'est la JVM qui en décide.

    Citation Envoyé par Yonito Voir le message
    Le choix s'est fait de le faire par une applet car il nous permettra d'intervenir sur l'applet en elle meme pour configurer le programme externe (en cas de modification ou simplement pour l'installation du programme la premiere fois) et non pas de passer sur chaque poste pour la configuration dans le cas ou cela se ferait par un bat.

    merci
    Utilise le service de déploiement à distance d'active directory, ils sont spécifiquement fait pour ça, pousser des applications, des versions et de la config vers les machines utilisateurs.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut
    Si tu veux quand une applet se lance, j'ai le logo de la JVM qui se lance a cote de l'heure (logo par lequel on accede a la console de l'applet). Lorsque l'applet fini son traitement, ce processus disparait. C'est ce que j'appelle "l'applet se termine".

    Or dans l'applet qui lance mon programme externe, ce processus ne se termine pas.

    Je connaissais pas ce active directory mais sa a l'air pas mal. Dans ma boite on utilise wincvs pour deployer des versions.

    merci

Discussions similaires

  1. Récupérer la main sur un process Runtime
    Par Mayhem555 dans le forum Général Java
    Réponses: 4
    Dernier message: 28/10/2011, 12h35
  2. Nommer un process via le main
    Par Nalfeim dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 27/03/2009, 09h50
  3. tuer un process quand il nous rend pas la main
    Par lerab51 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 06/08/2008, 11h35
  4. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  5. execl rend-elle la main?
    Par chezjm dans le forum C
    Réponses: 16
    Dernier message: 03/06/2002, 18h28

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