fin de processus lors d'acces fichier - Java - Programmation
Marsh Posté le 03-08-2004 à 09:43:54
ca n'a surement rien à voir avec la lecture du fichier...
Marsh Posté le 03-08-2004 à 09:47:42
Et puis il faut mettre les close dans un clause (hi hi hi) finally pour être sûr de bien fermer les fichiers.
Marsh Posté le 03-08-2004 à 10:01:44
ben le truc c'est que j'ai ce probleme uniquement lors de l'acces au fichier alors je pense que ca viens de ca. (je parle du cas ou j'ai pas d'exception declanchée bien entendu)
Marsh Posté le 03-08-2004 à 11:24:01
Ben quand je termine mon application: soit par un menu "quitter" ou par la croix, je fais un dispose().
... je vais essayer le System.exit(O)
... Ouais! ca marche! c'est cool, merci!
Mais je comprend pas pourquoi mon dispose() termine bien le processus lorsque je fais aucun acces aux fichiers mais pas dans le cas ou j'y accede... Enfin le principal c'est que ca marche maintenant.
Merci encore
Marsh Posté le 03-08-2004 à 11:39:52
ruready a écrit : Mais je comprend pas pourquoi mon dispose() termine bien le processus lorsque je fais aucun acces aux fichiers mais pas dans le cas ou j'y accede... Enfin le principal c'est que ca marche maintenant. |
Surement à cause de l'affichage de la fenêtre qui te permet de choisir le fichier.
Elle ne doit pas être "disposée". (faudrait vérifier dans les sources)
http://java.sun.com/j2se/1.4.2/doc [...] ssues.html
Citation :
|
une solution est de boucler sur toutes les frames (Frame.getFrames) en appelant dispose dessus ... c'est toujours plus propre qu'un System.exit(0)
Marsh Posté le 03-08-2004 à 13:37:35
OK, merci, si j'ai le temps je ferais ca plus proprement en "disposant" la frame du filechooser (si ca vient bien de la) (d'ailleurs moi je dispose toutes mes frames alors...) Je trouve quand meme ca un peu bizarre que le la boite de dialogue du filechooser ne se dispose pas toute seule...
Je vous tiens au courant si j'en sais davantage...
Marsh Posté le 03-08-2004 à 13:47:29
Bon j'ai essayé sur un exemple tout bete: une JFrame et un FileChooser.
Si je fais un dispose() en quittant ma JFrame, ca me laisse un processus.
Mais en faisant un dispose() de toutes les frames, ca fonctionne. J'ai fais comme tu m'as dit benou: Frame.getFrames() puis une boucle pour toutes les "disposer".
Conclusion: La boite de dialogue du JFileChooser ne se dispose pas a sa fermeture.
Merci pour ton aide benou!
Marsh Posté le 03-08-2004 à 13:54:04
benou a écrit : |
En fait c'est quoi la difference? le System.exit(0) doit faire un dispose() de toutes les frames aussi, non?
Marsh Posté le 03-08-2004 à 14:00:27
ruready a écrit : En fait c'est quoi la difference? le System.exit(0) doit faire un dispose() de toutes les frames aussi, non? |
Le System.exit(...) termine la jvm en libérant toutes les resources occupées et en renvoyant le code passé en paramètre à l'appelant (windows ou un shell sous linux ou autre). Mais c'est un peu brutal. Y'a pas de dispose() appelé (peut-être que finalize() est appelé sur chaque objet en mémoire), la mémoire occupée est rendue à l'os.
En général, tu le mets en fin de main() pour sortir de la jvm.
la méthode main() est lancée dans son propre thread, quand elle se termine , son thread se termine mais si tu as d'autres threads que tu as lancés et que tu n'as pas arrêtés, la jvm peux continuer à tourner. le System.exit() assure qu'on termine la jvm, proprement si tu as fait le ménage avant, ou salement.
Marsh Posté le 03-08-2004 à 14:38:17
pascal34 a écrit : |
ha bon ?
Marsh Posté le 03-08-2004 à 14:41:47
benou a écrit : |
En général, tu souhaites sortir de la jvm quand ton main se termine.
Mais c'est pas une règle générale (cf GUI apps)
Marsh Posté le 03-08-2004 à 14:42:51
on général, la jvm se termine tout seule en fin de main ...
Marsh Posté le 03-08-2004 à 15:10:53
benou a écrit : on général, la jvm se termine tout seule en fin de main ... |
Sauf si tu as une application graphique : le thread main se termine et seuls survivent les thread de gestion des evènements et les threads système (gc, ...)
ou
tu lances un autre thread depuis le main. la jvm ne se termine que si le thread en question se termine (si je me trompe pas).
Marsh Posté le 03-08-2004 à 22:46:33
pascal34 a écrit : Sauf si tu as une application graphique : le thread main se termine et seuls survivent les thread de gestion des evènements et les threads système (gc, ...) |
ben oui, raison de plus pour pas foutre un System.exit(0) en bas du main
Marsh Posté le 04-08-2004 à 09:58:19
benou a écrit : ben oui, raison de plus pour pas foutre un System.exit(0) en bas du main |
Dans ce cas c'est certain
Faut le mettre ailleurs
Marsh Posté le 04-08-2004 à 11:13:11
pascal34 a écrit : |
mais pkoi tu veux à tout prix le mettre ?
Marsh Posté le 04-08-2004 à 11:47:12
benou a écrit : mais pkoi tu veux à tout prix le mettre ? |
Je veux pas à tout prix le mettre, mais ça aide parfois.
Dans son cas c'est utile : la méthode dispose() c'est pas à toi de l'appeler normalement !
S'il a fermé toutes les resources, fichiers et autres, il mettre un System.exit(0), pas besoin de passer derrière chaque Frame pour appeler dispose dessus.
Marsh Posté le 05-08-2004 à 09:10:26
pascal34 a écrit : Je veux pas à tout prix le mettre, mais ça aide parfois. |
+1
Jusqu'a la j'en avais pas besoin mais dans certains cas comme ca c'est moins galere que de verifier que toutes les Frames se "disposent" bien.
Marsh Posté le 05-08-2004 à 10:09:10
ruready a écrit : +1 |
Tu pourrais montrer la partie de ton code qui utilise le JFileChooser ?
ca m'étonne cette histoire de dispose qui est pas appelé ...
Marsh Posté le 05-08-2004 à 11:55:04
benou a écrit : Tu pourrais montrer la partie de ton code qui utilise le JFileChooser ? |
Code :
|
voila
Marsh Posté le 05-08-2004 à 16:08:02
J'ai regardé un peu, ca ressemble à un bug du jdk 1.3.
Voici le même extrait du source de JFileChooser en jdk 1.3 et 1.4 :
JDK1.3.1_02
|
JDK1.4.2_01
|
en JDK1.4 y a un dialog.dispose(), pas en JDK1.3 ... ce qui explique le comportement de ton appli (si tu es bien en 1.3)
Marsh Posté le 03-08-2004 à 09:13:10
Bonjour,
J'ai un probleme lorsque j'accede a un fichier (lecture ou ecriture). Le processus ne se termine pas lorsqu'on quitte mon application (uniquement si on a fait des "ouvrir" ou des "enregistrer" ).
Voici par exemple comment je m'y prends pour lire dans un fichier:
J'ai bien fait des close comme vous pouvez le voir. Si vous voyez pourquoi ca fait ca...
Merci d'avance
Message édité par ruready le 03-08-2004 à 09:14:07