2012-05-16 3 views
0

J'ai une interface graphique et sur un événement click, j'appelle des requêtes de base de données pour générer plusieurs cartes. Je ne peux voir aucun graphique tant que tous les diagrammes ne sont pas complétés, cela signifie qu'il y a un problème avec les composants de l'interface graphique qui se déplacent vers le graphique suivant avant que le premier graphique soit complété et montre son contenu. Quelle pourrait être la raison possible et comment éviter un tel problème?Java Swing - Bloc d'interface utilisateur

+1

Pouvez-vous montrer du code? – Jonas

Répondre

3

Il n'y a aucun problème avec les composants. Il y a un problème avec votre conception. Vous effectuez les requêtes de longue durée et les mises à jour des graphiques dans une seule méthode s'exécutent dans le thread d'envoi d'événement. Ce faisant, l'EDT est complètement bloqué et ne peut pas repeindre quoi que ce soit tant que toutes les requêtes n'ont pas été exécutées et que tous les diagrammes ont été générés.

Utilisez un thread d'arrière-plan pour exécuter les requêtes et générer un graphique dans l'EDT, chaque fois qu'une requête est terminée. La classe SwingWorker aide à faire cela. Lisez its API doc et the tutorial à propos de la simultanéité dans Swing.

+1

Merci pour le commentaire. J'ai eu la même coupe. Veuillez trouver ci-dessous ce que je fais btnGenerateGraph.addActionListener (new ActionListener() {public void actionPerformed (ActionEvent arg0) {// Générer des graphes pour MYSQL mysqlGrpahGenerator.generateMYSQLGraph(); luceneGraphGenerator.generateLuceneGraph();}); Où voulez-vous que je change dans le code? – Jone

+1

Donc, vous avez déjà lu le javadoc et le didacticiel auquel je me suis connecté? Sinon, lisez-les. Tout est expliqué ici. Si vous les avez déjà lus, relisez-les, car vous ne semblez pas avoir compris ce qu'ils ont expliqué. –

+0

Eh bien, je l'ai rouge et je sais quel est le problème. Maintenant, je veux faire le changement dans mon code mais je ne comprends pas où je devrais mettre à jour le code. En fait, la méthode generateMYSQLGraph(); générer 8-10 graphiques et c'est comme si je dois utiliser courir 8-10 fois :( – Jone