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

Autres Java Discussion :

Différencier la demande de fermeture via une interface et via un taskkill


Sujet :

Autres Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Différencier la demande de fermeture via une interface et via un taskkill
    Bonjour,

    N'ayant pas trouvé grand chose sur ce sujet sur internet et ne sachant comment faire je viens vers vous pour le problème suivant:
    - serait-il possible de différencier la demande de fermeture d'une fenêtre (ou application RCP) suivant qu'elle soit faîte via l'interface ou via un signal windows envoyé avec taskkill?

    L'idée serait que l'appli se ferme sans demande de message de confirmation si la demande est faîte en ligne de commande avec un taskkill (sans forcer le fermeture) et de présenter un message de confirmation si la fermeture est lancée via l'interface!

    (Sous Windows évidemment^^)

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Lorsque tu vas essayer de fermer ton application via l'interface, tu vas forcement appuyer quelque part et donc générer un event.

    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
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    class FrameByeBye {
     
        // The method we wish to call on exit.
        public static void showDialog(Component c) {
            JOptionPane.showMessageDialog(c, "Bye Bye!");
        }
     
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
     
                    final JFrame f = new JFrame("Say Bye Bye!");
                    f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
                    f.addWindowListener( new WindowAdapter() {
                        @Override
                        public void windowClosing(WindowEvent we) {
                            showDialog(f);
                            System.exit(0);
                        }
                    } );
                    f.setSize(300,200);
                    f.setLocationByPlatform(true);
                    f.setVisible(true);
     
                }
            });
        }
    }
    Terminer ton programme en ligne de commande ne t'affichera rien par définition puisque tu vas forcer le processus à se fermer.


    Cdt.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci de ta réponse, l'idée d'utiliser le listener comme ça est bonne mais j'utilise actuellement eclipse rcp et la fermeture de la fenêtre déclenche une méthode preWindowShellClose(), c'est dans cette méthode qu'une fenêtre de confirmation s'affiche.

    Je suis en train de chercher mais je n'ai toujours pas trouvé comment mettre une sorte de listener sur la fermeture de la fenêtre!

  4. #4
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Ça ne change rien au problème.

    Tu travailles un environnement qui t'es propre, donc tu dois adapter la solution à ton travail.

    L'idée reste que il y à forcément un événement qui est généré lorsque tu appuis quelque part ( sur le bouton de fermeture ou autre ça ne change rien ).
    Donc à toi de l'identifier et d'écrire le code de fermeture à l'intérieur (avec appel d'une boite de confirmation si tu le souhaites ).

    Cdt.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Oui je sais bien, le problème c'est que la fermeture avec un taskkill ou avec l'icône en haut à droite appelle la même fonction preWindowShellClose() ... Je ne trouve pas de différence entre les 2 types de fermeture dans une appli rcp.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    pas évident de différencier les différentes façons de fermer l'application (on pourrait la fermer également par un menu en plus du bouton en haut à droite), dans la mesure ou toutes passent par un évenement traité par la boucle évenementielle de SWT, y compris le taskkill "soft" qui doit envoyer simplement un évènement à l'application pour qu'elle se ferme.

    On doit pouvoir différencier les sources dans l'écouteur d'évenement, mais il faudrait soit redéfinir la WorkbenchWindow (ce qui n'est pas possible à ma connaissance), soit peut être intercepter un de ses services pour détecter que la fermeture se fait pas une action du workbench pour la différencier d'un signal de l'OS... mais pas évident de l'intercepter "avant" la prise en compte de l'évenement de fermeture du workbench à priori : il faudrait tester...

    J'ai un peu regardé les stacktraces dans les deux cas, et il semble qu'elles soient légèrement différentes. Je ne sais pas si c'est le fruit du hasard, ou propre à mon environnement, ou autre, mais tu peux peut être exploiter cette différence, en cherchant si tu peux déterminer si l'appel passe par une classe dans un cas, et jamais dans l'autre.

    Dans le cas d'un kill j'ai :

    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4619)
    at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method)
    at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:2976)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3498)
    Dans le cas d'un close j'ai :

    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4619)
    at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
    at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2411)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3501)
    Sinon, question, pourquoi ne pas afficher le dialogue lors d'un taskkill ? est ce que ton but est de pouvoir fermer "silencieusement" ton appli en ligne de commande ? Si c'est le cas, tu peux peut être prévoir plus simplement une commande de fermeture que tu pourrais contrôler du coup (et donc simplement utiliser un booléen pour savoir qu'on est passé par cette commande pour fermer l'application)...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Ça ne change rien au problème.

    Tu travailles un environnement qui t'es propre, donc tu dois adapter la solution à ton travail.

    L'idée reste que il y à forcément un événement qui est généré lorsque tu appuis quelque part ( sur le bouton de fermeture ou autre ça ne change rien ).
    Donc à toi de l'identifier et d'écrire le code de fermeture à l'intérieur (avec appel d'une boite de confirmation si tu le souhaites ).

    Cdt.
    Salut,

    ce serait vrai dans une application écrite complètement soit même, mais là, il s'agit d'une application montée sur un framework (en l'occurence, Eclipse RCP), dans lequel tu peux pas faire tout ce que tu veux malheureusement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    ce serait vrai dans une application écrite complètement soit même, mais là, il s'agit d'une application montée sur un framework (en l'occurence, Eclipse RCP), dans lequel tu peux pas faire tout ce que tu veux malheureusement.
    Effectivement je viens de voir ça. Je n'ai jamais vraiment travailler avec éclipse RCP donc je ne connais pas vraiment son mode de fonctionnement, et malheureusement je n'ai pas vraiment le temps de faire des tests en ce moment..

    Désolé Epiliptik

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ouep effectivement je voudrai pouvoir la fermer en ligne de commande à distance (donc sans interface, d'où mon problème) et sans forcer l'arrêt. Je ne comprend pas trop ta dernière proposition:

    "Si c'est le cas, tu peux peut être prévoir plus simplement une commande de fermeture que tu pourrais contrôler du coup (et donc simplement utiliser un booléen pour savoir qu'on est passé par cette commande pour fermer l'application)... "

    Le problème reste de savoir si l'utilisateur a fermé l'appli avec l'interface ou si elle a été fermée en ligne de commande.

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Epiliptik Voir le message
    Ouep effectivement je voudrai pouvoir la fermer en ligne de commande à distance (donc sans interface, d'où mon problème) et sans forcer l'arrêt. Je ne comprend pas trop ta dernière proposition:

    "Si c'est le cas, tu peux peut être prévoir plus simplement une commande de fermeture que tu pourrais contrôler du coup (et donc simplement utiliser un booléen pour savoir qu'on est passé par cette commande pour fermer l'application)... "

    Le problème reste de savoir si l'utilisateur a fermé l'appli avec l'interface ou si elle a été fermée en ligne de commande.
    Je voulais parler de donner la possibilité à ton appli d'être pilotée par une commande externe. J'avais trouvé il y a longtemps un blog qui parlait d'un plugin qui permettait de scripter une application RCP depuis un batch, mais le blog n'existe plus malheureusement, et je ne me souviens plus du tout de son nom

    Sinon j'ai implémenté personnellement la chose avec un petit serveur http interne, qui te permet d'envoyer des commandes à ton RCP : avec un système similaire, tu pourrais faire une commande de fermeture qui te permet de fermer ton appli en ligne de commande (par wget). Mais tu peux faire ça en UDP pour te simplifier le truc, ou avec une socket toute simple. Il y a plein d'autre méthodes d'ailleurs (serveur rmi, dossier spoolé avec notif système, etc...)

    Tu prévoies un signal de stop (une commande) et sur réception de ce signal, tu appelles IWorkbench.shutdown(), après avoir positionné un booléen (ou autre) pour indiquer que l'ordre de shutdown et consécutif à une commande externe. Dans l'advisor, dans la méthode preWindowShellClose(), tu n'as plus qu'à lire ce booléen.

    Tu peux également "encapsuler" le traitement d'arrêt dans un service windows( au démarrage de ton appli tu installes ton service en lui passant le port de ta socket, et la méthode stop du services envoit un signal sur la socket), ce qui te permettrait de te passer de wget
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Epiliptik Voir le message
    Oui je sais bien, le problème c'est que la fermeture avec un taskkill ou avec l'icône en haut à droite appelle la même fonction preWindowShellClose() ... Je ne trouve pas de différence entre les 2 types de fermeture dans une appli rcp.
    Première chose à faire, analyse


    breakpoint dans preWindowShellClose().

    Ensuite, tu kille séparément avec taskill et avec la petit croix. Dans le breakpoint, tu remonte la stacktrace jusque at org.eclipse.swt.widgets.Display.windowProc(Display.java:4619)

    Là, tu va trouver le message envoyé par windows à l'application. Est-ce que c'est le même ou il est différents dans les deux cas?

    Si c'est le même -> Pour l'application c'est exactement la même chose, tu l'a dans l'os => boite de confirmation dans tous les cas
    Si c'est différentier, faut voir un peu en aval que est l'instace de Control qui traite ce message (parce que Display dispatche aux différents Control qu'il connait) pour voir si tu n'aurais pas la possibilité de surcharger ce control, pour traiter ce message différement.

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Première chose à faire, analyse


    breakpoint dans preWindowShellClose().

    Ensuite, tu kille séparément avec taskill et avec la petit croix. Dans le breakpoint, tu remonte la stacktrace jusque at org.eclipse.swt.widgets.Display.windowProc(Display.java:4619)

    Là, tu va trouver le message envoyé par windows à l'application. Est-ce que c'est le même ou il est différents dans les deux cas?

    Si c'est le même -> Pour l'application c'est exactement la même chose, tu l'a dans l'os => boite de confirmation dans tous les cas
    Si c'est différentier, faut voir un peu en aval que est l'instace de Control qui traite ce message (parce que Display dispatche aux différents Control qu'il connait) pour voir si tu n'aurais pas la possibilité de surcharger ce control, pour traiter ce message différement.
    C'est justement ce que j'ai fait ce matin, et la seul différence que j'ai trouvée c'est celle que j'ai indiqué dans mon post (@Elliptik pourrait faire la même chose juste pour vérifier s'il a la même différence, surtout que le framework change fortement entre version d'Eclipse en plus)

    Sinon, on ne peut pas envisager un truc du type de modifier un contrôle ou surcharger un code existant : aucune des instances de classes intervenant dans la stacktrace, sauf l'advisor, ne sont modifiables/remplaçables : il s'agit soit de classes natives de SWT, soit de classes privées, soit de classes internal (protégées par OSGI), soit d'instances innacessibles (private) : et c'est fait exprès, Eclipse RCP ne permet de modifier que le WorkbenchWindowAdvisor. A partir de cet advisor on peut bien sûr remplacer n'importe quelle action ou commande (par le WindowsConfigurer), donc la commande exit par exemple. Mais le bouton de fermeture de fenêtre Windows non ! A part en modifiant du code des plugins d'eclipse (y compris le code natif !)... Quand bien même on pourrait le faire, la méthode de l'advisor n'ayant pas d'argument, on pourrait pas différencier l'évenement de fermeture (on peut évidement réécrire tout le mécanisme du workbench, mais c'est pas trop le but d'utiliser un framework )

    C'est pour ça que je parlais d'une analyse de la stacktrace (au runtime je veux dire) pour repérer le passage dans une méthode particulière à chaque cas. C'est un peu bourrin certes (le problème de perf n'est pas trop génant vu qu'on ferme l'appli) , mais comme il n'y a pas moyen d'intercepter l'événement avant qu'il ne soit traité par le workbench, je ne vois pas d'autres solutions pour traiter la problématique de cette manière.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos réponses, j'ai regardé la stackTrace et j’obtiens aussi un déroulement différent si la fermeture est faîte avec un taskkill ou avec l'interface donc je vais essayer de parcourir la stackTrace à chaque fois et agir en fonction du résultat!

    J'ai aussi regardé les méthodes invoqués dans la stackTrace et effectivement ça me paraît être une mauvaise idée de tenter ça (voir impossible).

    Si cette méthode fonctionne mon problème devrait être résolu!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Epiliptik Voir le message

    Si cette méthode fonctionne mon problème devrait être résolu!
    Elle fonctionnera tant que tu ne changera pas de version de la librairie....


    Est-ce qu'il n'y a pas quelque part dans SWT ou avec une librairie native tierce, la possibilité d'attraper directement le taskill (un peu comme on peux capter les signal sous linux), afin de marker un flag "byTaskill" statique quelque part, que tu réutiliserais au lieu de jouer avec la staktrace.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'avais déjà regardé un peu ça et je n'avais rien trouvé, on peut intercepter la fermeture de plusieurs façon mais pas le taskkill spécialement :/

    Je vais quand même jeter un œil mais j'en doute, sinon ça fonctionne pour le moment mais effectivement si une maj future modifie le déroulement de la fermeture ça risque de ne plus fonctionner...

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Est-ce qu'il n'y a pas quelque part dans SWT ou avec une librairie native tierce, la possibilité d'attraper directement le taskill (un peu comme on peux capter les signal sous linux), afin de marker un flag "byTaskill" statique quelque part, que tu réutiliserais au lieu de jouer avec la staktrace.
    Salut,

    j'ai un peu cherché et je n'en ai pas trouvé. D'ailleurs il n'y a pas besoin quelle soit en SWT à priori, une API en pure java devrait suffire.

    J'ai par ailleurs essayé avec un shutdownhook, mais celui-ci est invoqué après la fermeture du workbench, donc trop tard.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je viens de penser à une autre solution peut être : déterminer la liste des processes en court, et y chercher s'il n'y a pas un taskkill sur l'application elle même ?

    Déjà il faudrait être sur que le taskkill est toujours "running" lorsque l'appli se ferme et également pouvoir connaitre le pid de l'appli en cours.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'avais aussi essayé avec le shutDownHook et effectivement il s’exécute après et aussi dans tous les cas donc ça ne me permet pas de différencier les cas.

    Le taskkill s’exécute juste une fraction de seconde le temps d'envoyer un signal et ensuite il se termine donc inutile de checker s'il y a un processus taskkill, il n'y en aura jamais :/

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Epiliptik Voir le message
    Le taskkill s’exécute juste une fraction de seconde le temps d'envoyer un signal et ensuite il se termine donc inutile de checker s'il y a un processus taskkill, il n'y en aura jamais :/
    Ok. Dommage.

    Il ne te reste plus qu'à bien revérifier les 2 stacktraces à chaque upgrade d'Eclipse.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Ok. Dommage.

    Il ne te reste plus qu'à bien revérifier les 2 stacktraces à chaque upgrade d'Eclipse.
    C'est à ça que servent les unit test. Mais il va être drole à écrire le unit test qui fait un taskill sur un process tiers lancé par le unit test qui devra mettre à jour une donnée (fichier?) disant ce qu'il a repéré comme kill

Discussions similaires

  1. Modification dans une bdd via une liste choisie via une checkbox
    Par LuffyWinchester dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 20/03/2015, 16h41
  2. Réponses: 1
    Dernier message: 03/10/2014, 20h40
  3. Réponses: 9
    Dernier message: 23/12/2012, 11h11
  4. [VB4] Jouer via une interface en ligne
    Par Ticoche dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/03/2006, 20h38
  5. Appeler un driver USB via une interface.
    Par HR100 dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2005, 23h38

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