2010-01-20 10 views
0

J'ai un petit dialogue indépendant du reste du projet. Plusieurs threads peuvent appeler cette boîte de dialogue.Récupère la boîte de dialogue modale en cours en Java

Le problème est un JDialog modal qui montre la progression de la tâche en cours. Ma boîte de dialogue sera ouverte derrière la boîte de dialogue de progression. Il n'y a aucune possibilité d'obtenir ce dialogue.

Est-il possible d'obtenir la boîte de dialogue active afin de pouvoir les utiliser comme parent de mon nouveau dialogue?

+0

"Plusieurs threads peuvent appeler cette boîte de dialogue." - Certainement que le Thread Event Dispatch devrait invoquer cette boîte de dialogue (en supposant que vous utilisez Swing)? – Adamski

+0

La boîte de dialogue de progression fonctionne avec SwingWorker. Le problème est que le premier appel peut provenir de la tâche de SwingWorker et un second d'une autre position (indéfinissable, car la boîte de dialogue créée doit accepter les certificats SSL et peut se produire chaque fois qu'une connexion SSL est établie.) Mais vous ' à droite, j'ai dû refactoriser une partie du code pour permettre aux tâches d'avoir le dialogue de progression etc. Je pense que maintenant j'ai une version de travail. Merci. –

Répondre

0

Quelques points:

Vous dites que plusieurs threads peuvent potentiellement appeler cette boîte de dialogue, alors que pour une application Swing vous devez vous assurer que le fil de répartition de l'événement est le seul thread qui lance cette boîte de dialogue.

Si vous suivez cette contrainte, il est plus probable que vous ayez une référence à la boîte de dialogue de progression déjà affichée et pourrez donc l'utiliser comme parent de dialogue.

Il semble que vous ayez besoin de réarchiver votre application. En règle générale, vous pouvez appeler un SwingWorker pour exécuter la tâche d'arrière-plan, qui "publie" la progression sur le thread Swing, ce qui met alors à jour la boîte de dialogue de progression. Un autre conseil: Vous pouvez utiliser la méthode toFront() sur Window pour afficher une boîte de dialogue en avant de l'écran, bien que cela ne semble pas être le problème principal.

Questions connexes