Mon prog ne rend plus la main - Java - Programmation
Marsh Posté le 29-10-2003 à 19:05:23
ben t'as des threads pas tués
Marsh Posté le 29-10-2003 à 19:10:16
http://java.sun.com/products/jdk/1 [...] #exit(int)
t'es sur que t'as le droit de faire ton exit() ?
Marsh Posté le 29-10-2003 à 19:20:18
the real moins moins>>jles tue tous, et y'en a souvent qu'un (pour les tests en tt cas)
nraynaud>>ce que je peux te dire c'est qu'aucune exception n'est levé...Dans quel cas n'aurait je pas le droit de l'utiliser au juste ?
je decouvre juste runFinalization() ca peux donner quelque chose ce truc
Marsh Posté le 29-10-2003 à 19:38:31
je vien d'essayé avec
Runtime.getRuntime().runFinalization();
et ca resoud pas le probleme
sinon j'ai oublier de preciser que parfois le prog se ferme sans soucis , mais qu'environs 2 fois sur 3 il refuse de se fermer
Marsh Posté le 29-10-2003 à 20:25:46
veryfree a écrit : the real moins |
Citation : |
J'ai aucune idée de la gueule du handler d'exception par défaut dans ce cas, vu que d'habitude il quitte en gerbant la pile d'exceptions dans le canal d'erreur, mais là c'est précisément ce comportement qui serait interdit.
Et je ne connais rien au modèle de sécurité de java.
Sinon, t'es en multithread ?
Marsh Posté le 29-10-2003 à 20:32:04
oui; pour simplifier chaque plugincorrespond a un thread
vu que pour l'instant il n'existe qu'un seul plugin et que c le seul thread lancé, c certain que le probleme viens de lui mais dans sa methode stop je fait le necessaire
Marsh Posté le 29-10-2003 à 20:50:20
prouve le
parce que manifestement, non.
Marsh Posté le 29-10-2003 à 20:59:39
J'ai eu un problème dans le genre y'a un bout de temps. Je ne me souviens plus bien du pourquoi du comment, mais je sais que dans un premier temps ca s'était resolu à grand coup de Thread.sleep() et de System.gc(). Mais bon à la base c'était quand même un gros problème dans la gestion de mes threads.
Marsh Posté le 29-10-2003 à 21:22:17
.sleep() c'est pas deprecated ?
t'utilise quel version de la jdk ? la 1.0 alpha ?
Marsh Posté le 29-10-2003 à 21:25:39
ToxicAvenger a écrit : .sleep() c'est pas deprecated ? |
Thread.sleep(long millis), bien sur. Au temps pour moi
Marsh Posté le 29-10-2003 à 21:43:51
the real moins moins a écrit : ben t'as des threads pas tués |
un System.exit(),ca quite. qu'il y ait des threads en cours ou pas ...
vraiment bizarre ...
t'as essayé un Runtime.getRuntime().halt() ?
sinon, je sais qu'il y a moyen d'envoyer un signal au process qui peremt d'afficher l'état (stacktrace) de tous les threads. mais je connais plus la commande c'est con, ca pourrait te servir là ...
Marsh Posté le 29-10-2003 à 21:44:49
benou a écrit : |
alors là j'en mettrais pas ma main au feu
Marsh Posté le 29-10-2003 à 21:45:31
ben un pti coup de debugger sinon..
Marsh Posté le 29-10-2003 à 21:50:17
the real moins moins a écrit : alors là j'en mettrais pas ma main au feu |
en lisant bien la javadoc, en fait c'est plus le halt qui force le exit ... mais pour faire foirer le exit, d'après ce que j'ai compris, faut avoir mit des ShutdownHook. Je pense pas qu'il ait fait ca l'ami veryfree ...
sinon, j'ai retouvé pour l'envoie de signal : Ctrl+pause !
essaye de faire ca dans la shell dos de ton appli quand elle refuse de s'arrêter ...
Marsh Posté le 30-10-2003 à 00:58:31
ola, ca fait beaucoup de reponse, je tiens a vous remercié tous
voila ce que me donne ctrol pause:
Citation : Full thread dump Java HotSpot(TM) Client VM (1.4.1_04-b01 mixed mode): |
sinon j'utilise effectivement un ShutdownHook , je pensait que ca servais lorsque la jvm se scratch mais ca me pose pas de probleme de l'enlever si c'est la source du probleme ; j'essaye ca
Marsh Posté le 30-10-2003 à 00:59:55
le shutdownhook si je ne m'abuse c'est un "truc" qui est "executé" quand la vm est arreté, donc aussi qd tu fais un system.exit
sinon si t'as un debugger sous la main t'auras un truc plus lisible que ce que tu viens de nous paster là
Marsh Posté le 30-10-2003 à 01:01:48
oui , c clair que c'est un peu flou leur truc
mais j'ai pas de debugger
Marsh Posté le 30-10-2003 à 07:50:21
Ca y est je me souviens de mon problème ; c'était avec un java.util.Timer. En fait je lançait le timer sans jamais lui attribuer de TimerTask, et du coup le thread ne s'arrêtait pas. Tu utilises des Timer ?
Marsh Posté le 30-10-2003 à 09:05:21
on voit ton thread principal :
Citation : "AWT-EventQueue-0" prio=7 tid=0x0F2D54C8 nid=0x6a4 in Object.wait() [f5af000..f5 |
et on voit qu'il bloque lors de l'excution des hooks.
T'as de la synchronization dans ton ShutdownHook ? parce que ton truc ca ressemble à un deadloack à l'intérieur du ShutdownHook ...
qu'est ce que tu faus dedans ?
Marsh Posté le 30-10-2003 à 09:24:46
the real moins moins a écrit : ben t'as des threads pas tués |
Edit: veryfree je peux regarder ce soir si tu veux. Le shutdown hook c'est le machin qui sauve les settings et tout le bordel?
Marsh Posté le 30-10-2003 à 09:43:15
en fait j'avais mal regardé : ce qui pose problème c'est ca :
Citation : |
ca ca ressemble à ton thread 'ShutdownHook' (c'est bien de leur donner des noms à tes threads )
donc visiblement quand tu fais le logout, ca essaye de faire des rafraichissement de l'interface. Le problème c'est que ce refresh appelle à un moment la méthode findHeavyweightUnderCursor qui doit attendre le déclenchement de quelque chose qui ne doit jamais se produire du fait que la jvm est en train de s'arrêter.
bref, faire des modifs de la gui dans un 'ShutdownHook', c'est mal !
en plus d'après ce que je vois, tu peux très bien l'éviter : c'est juste que tu fais un System.exit(0) "à la porc", alors que tu devrais dans un premier temps appeler le traitement de fermeture (le traitement que fait ton 'ShutdownHook'), et ensuite faire un exit().
Marsh Posté le 30-10-2003 à 10:28:02
oui mais non le shutdown hook est là à la base le user fait un kill sur le process.
(Mais je suis d'accord qu'il y a des trucs là dedans qui n'ont pas lieu d'être)
Je vais regarder j'ai dit
Marsh Posté le 30-10-2003 à 10:45:09
DarkLord a écrit : oui mais non le shutdown hook est là à la base le user fait un kill sur le process. |
tu peux refaire ta phrase en français ??
Marsh Posté le 30-10-2003 à 11:37:38
le shutdown hook a été implémenté si le user fait un kill du process, pas si ON décide de quitter l'appli.
Donc il faut que je regarde ce que fous ce shutdown hook
Marsh Posté le 30-10-2003 à 12:08:32
DarkLord a écrit : |
oui voila
sinon,jl'ai temporairement mis en commentaire et j'ai ajouté
Runtime.getRuntime().halt(0) ;
avant le System.exit(0) qui lui n'est plus appelé du coup.
et ca semble marché
je met semble car le probleme est aleatoire et jve pas parler trop vite
Marsh Posté le 30-10-2003 à 12:17:06
benou a écrit : en fait j'avais mal regardé : ce qui pose problème c'est ca :
|
voila a quoi ressemble maintenant ShutdownHook:
Code :
|
ca explique pourquoi il a pas de nom j'imagine
Citation : en plus d'après ce que je vois, tu peux très bien l'éviter : c'est juste que tu fais un System.exit(0) "à la porc", alors que tu devrais dans un premier temps appeler le traitement de fermeture |
non non, avant d'appelé System.exit(0) y'a plein de traitements (fermer les logs, arreter chaque thread...)
Citation : Faire des modifs de la gui dans un 'ShutdownHook', c'est mal ! |
oui le voila le probleme ; je crois que j'ai compris maintenant
Marsh Posté le 30-10-2003 à 12:28:44
ReplyMarsh Posté le 30-10-2003 à 12:29:32
bin ca n'a rien à voir ce que tu as mis
Marsh Posté le 30-10-2003 à 12:30:22
veryfree a écrit : |
stoi qu'est aléatoire
Marsh Posté le 30-10-2003 à 12:48:35
DarkLord a écrit : |
on peut savoir pourquoi?
Marsh Posté le 30-10-2003 à 13:00:51
the real moins moins a écrit : on peut savoir pourquoi? |
Regarde la Javadoc de System.exit
La raison qui fait qu'il ne sort pas est que le code dans son shutdown hook est blocké. Je te l'accorde c'est un thread mais je suppose que ce n'est pas ca que tu as voulu dire, pas vrai?
Marsh Posté le 30-10-2003 à 13:11:30
ReplyMarsh Posté le 30-10-2003 à 13:24:59
DarkLord a écrit : |
euh, ben j'ai vu qu'il y avait son shutdown hook qui trainait, mais ça j'aurais pas pu le deviner.
et la javadoc ne dit absolument pas comment cette methode ce comporte si des threads sont toujours en train de tourner.
Marsh Posté le 30-10-2003 à 13:25:55
veryfree a écrit : |
oh putain quel sens de l'humour et de la dérision
Marsh Posté le 30-10-2003 à 13:47:22
bah quoi putain ct pour rire que je disais ça
Marsh Posté le 30-10-2003 à 14:13:36
si ça commence par "stoi..." c que c pour rire
Marsh Posté le 29-10-2003 à 18:56:35
Bonjour a tous , j'ai un petit probleme avec mon prog java qui ne reagis plus a System.exit(0),je m'explique:
j'ai une interface Plugin ( start(),..., stop() )
la partie principale du soft appel start() de chaque plugin et lorsque je ferme l'appli elle appel stop() ( entre autre)
le probleme, c'est qu'apres avoir stopé tout ces plugins, j'appel System.exit(0); et celui si ne semble pas "tuer" le programme
Dans la console je vois apparaitre "avant System.exit" et le curseur de la console clignote et le prog est toujours en memoire et apparait ds gestionnaire de tache
Si je parle des plugins c'est parce que je suis certains que le probleme viens d'eux...
J'aimerait savoir si vous avez une piste, une petite idée de ce qui pourrait empecher le prog de rendre l'ame
Message édité par veryfree le 29-10-2003 à 19:00:44