Comment faire pour obtenir l'arrêt de crochet pour exécuter un processus lancé à partir d'Eclipse.
J'ai un arrêt de crochet dans mon application (créé à l'aide de Runtime.getRuntime().addShutdownHook
). Cependant, si je lance l'application depuis Eclipse, quand il est à l'arrêt, l'arrêt crochet ne pas exécuter.
Je pense que c'est à cause de l'Éclipse envoie l'équivalent d'une force de signal kill le processus, ce qui n'entraîne pas l'arrêt de crochet à exécuter (l'équivalent de taskkill /F (Windows) ou tuer -p sur Linux), bien que je ne suis pas absolument sûr.
Personne ne sait comment contourner ce problème? Je suis en cours d'exécution de Windows (Vista), et j'ai le sentiment que ça peut être une question spécifique, mais je ne suis pas sûr.
- Ne pas exécuter votre application à partir d'Eclipse?
- Je pense que @mattb la suggestion est bonne, parce que la plupart des programmes doit s'exécuter en dehors de l'IDE à un certain point. Par la voie, IntelliJ IDEA a un bouton pour ça: stackoverflow.com/questions/4727536.
- Bon, mais pas utile lorsque nous faisons rapide code-test-debug-code-test-debug cycles...
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé la suite de hack à la fin de ma principale méthode pour contourner le problème:
Tout d'abord, votre demande est la fin ou êtes-vous de force à la fin? Si vous êtes à la force de le terminer (via le bouton stop), ce Eclipse rapport de bug a des détails sur pourquoi cela ne fonctionne pas.
À défaut, vous avez peut-être raison sur ce qui est spécifique à Windows comportement. Je suis sur Mac donc je ne peux pas confirmer, désolé. Cependant, je peux vous dire que le programme de test suivant ne exécuter l'arrêt des crochets comme prévu.
La Javadoc Runtime#addShutdownHook ne mentionner que les crochets d'arrêt ne fonctionnent pas lorsque la JVM est abandonnée, pas sorti normalement, donc encore une fois, vous avez probablement raison dans vos hypothèses. Cela étant dit, voici quelques choses à essayer. Encore une fois, désolé je ne peux pas confirmer à l'avance-pas de Windows ici. (Et délicieusement!)
Voici un script que vous pouvez exécuter en dehors d'eclipse pour obtenir la liste des processus en cours d'exécution sous Eclipse que vous pourriez tuer.
kill -9
ne sera pas exécuté l'arrêt de crochets. Plus d'infos: superuser.com/questions/107543/...Je ne suis pas sûr de la façon de résoudre ce problème, mais l'Ide, ajout d'un bouton séparé de leur " Run " boîte de dialogue qui va s'arrêter la VM d'une manière qui appelle à la Fermeture des Crochets. Leur débogueur n'ont pas cette fonction.
Sur Windows pour arrêter une application java dans un façon standard, vous devez envoyer Ctrl + C pour elle. Cela fonctionne uniquement avec la console apps, mais Eclipse utilise
javaw.exe
au lieu dejava.exe
. Pour résoudre cela, ouvrez la configuration de lancement, JRE et sélectionnez l'onglet "Alternative JRE:". Le "Java exécutable" zone de groupe s'affiche et permet de saisir de l'autre exécutable "java".Maintenant nous avons besoin d'un programme externe pour envoyer Ctrl-C pour un processus caché de la console. J'ai trouvé des astuces ici et ici. Notre programme s'attache à la console du processus et envoie les événements de la console.
Test de programme java:
Fin:
Programme de Test de la sortie dans Eclipse:
Je suis coincé dans websphere à l'instant, et je ne vois pas ce que je cherche.
Mais je me souviens de l'éclipse ayant une configuration d'exécution de l'option relative au lancement de l'application dans la même machine virtuelle.
Est-il possible de lancer votre application java dans la même machine virtuelle comme l'éclipse de la VM?
Mais l'option se glisse mon esprit.
Sairam, c'est ici, En appelant Système.exit(0) nous pouvons mettre fin à l'éclipse de la JVM et peut voir l'Arrêt crochet résultats