Question

Je lisais Des clients riches et sales et ai remarqué que, bien que la version de Java soit à 6, il existe ne fait aucune mention du cadre concurrentiel. Ils parlent donc de java.util.Timer et de javax.swing.Timer mais pas du service d’exécution.

J'ai découvert les avantages d'ExecutorService dans la question " Java Timer vs ExecutorService . ; et a décidé d'utiliser le dernier sur le premier. Mais le livre parle de javax.swing.Timer et des avantages d’être spécifique au développement Swing.

Cela signifie-t-il donc que, pour le développement de Swing (boutons d’animation, etc.), javax.swing.Timer reste un meilleur choix ou existe-t-il une classe pertinente dans le nouveau Framework Concurrent qui le remplace?

Était-ce utile?

La solution

Eh bien, la minuterie de balançoire fonctionne au moins sur l’EDT afin que vous n’ayez pas à tout encapsuler avec des appels à invokeLater. Il fait également bon ménage avec Swing dans la mesure où il utilise Actions, ActionListeners et d’autres classes apparentées à Swing.

J'en resterais à Swing Timer pour les tâches liées à Swing et utiliserais le nouveau package simultané pour des tâches qui ne nécessitent pas la mise à jour de l'interface graphique.

Consultez Utiliser des minuteries dans les applications Swing pourrait contenir plus d’informations pour prendre (pardon) la décision.

Autres conseils

Je dirais que pour les choses simples liées au swing, le meilleur choix est le javax.swing.Timer en raison des avantages mentionnés ici .

  

Notez que la tâche du minuteur Swing est   effectué dans l'envoi de l'événement   fil. Cela signifie que la tâche peut   manipuler des composants en toute sécurité, mais   signifie également que la tâche devrait   exécuter rapidement.

D'un autre côté, si vous devez effectuer des opérations de traitement non liées au swing ou plus complexes / longues, le ExecutorService est très robuste et constitue définitivement le chemin à parcourir.

Juste une suggestion précisant ce que bruno avait conseillé, un moyen de tirer profit des excellents utilitaires de simultanéité Java 1.5+ sans casser Swing est de laisser votre ExecutorService faire tout le travail lourd (comme le disait bruno) mais une fois que cela est fait, le thread ExecutorService doit transférer l'interaction avec les composants d'interface utilisateur réels au thread AWT dans un Runnable à l'aide de l'un des éléments suivants:

  • javax.swing.SwingUtilities.invokeAndWait (runnable doRun)
  • javax.swing.SwingUtilities.invokeLater (Runnable doRun)

Ces méthodes transmettent le fichier exécutable à exécuter par le thread AWT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top