2010-07-01 1 views
1

Im assez nouveau à la programmation .... donc je fais un lecteur de musique qui a besoin de certaines fonctionnalités Je dois traiter un événement en même temps en 2 classes. Par exemple ...Est-ce que les événements de Java sont traités dans un thread séparé ou que je dois le faire moi-même?

Le lecteur joue de la musique sur son propre thread, lorsque cette musique est terminée, il déclenche musicFinished (MusicEvent), passe à la classe Playlist et demande àForAnotherMusicToPlay(), puis recommence à jouer. Lorsque musicFinished déclenche tout cela se produit en même temps: -A Logger, qui écoute l'événement, l'écrit dans un fichier journal. (Ai-je besoin d'un autre fil ici ou l'événement est déjà traité dans un autre fil?) -L'UG affiche la musique terminée, met à jour une étiquette et met l'horloge à 0. (Pour cela, j'utiliserais SwingUtilities.invokeLater, non?

Alors quelle est la meilleure solution pour ce cas? Faire mon propre événement? Qu'en est-il des discussions? dois-je faire alors moi-même? J'ai déjà googlé pour cela et j'ai découvert que l'action Effectuée est exécutée dans l'EDT (Event Dispatching Thread) mais je ne sais pas pour d'autres événements. sont-ils tous ??? Merci

Répondre

0

Tous les gestionnaires d'événements Swing sont appelés depuis EDT. En outre, SwingUtilities.invokeLater exécutera votre code dans l'EDT aussi, il attendra juste que tous les gestionnaires d'événements en attente soient appelés. Je ne suis pas sûr si c'est ce que vous voulez - sinon, vous devrez commencer votre propre thread.

+0

alors j'ai juste besoin de faire mon propre événement, en étendant java.util.EventObject ?? et quand il se déclenche il sera traité sur l'EDT? Donc, pour mettre à jour l'interface graphique, je peux simplement écrire du code graphique dans l'événement hanlder, et pour faire d'autres choses, je vais commencer un autre thread ?? Merci – fredcrs

+0

J'ai fait quelques testes ici et j'ai réalisé que l'événement que j'ai créé en étendant java.util.EventObject quand il a été déclenché n'était PAS traité dans l'EDT. J'ai utilisé SwingUtilities.isEvenItDispatchingThread(), pour cela. Il a été manipulé sur mon fil principal – fredcrs

Questions connexes