Comme vous l'avez vu de mon sujet ci-dessus,
J'aimerais savoir comment puis-je rejeter un JOPTIONPANE qui est devenu non pertinent à cause d'un autre JOPTIONSANE et parce que l'utilisateur, pour une raison quelconque, n'a pas rejeté le premier en cliquant sur le bouton OK (par exemple).
J'ai vu des articles dans une autre question similaire, et les gens ont suggéré de faire simplement: p> mais comment puis-je stocker une référence pour chaque JOPTIONPANE que j'ai et être capable de rejeter seulement cela voulait un. édité:
Merci P>
Exemple de code: p>
3 Réponses :
Réponse simple, qui n'est pas possible, car un seul Joptionpane code> peut exister dans l'heure actuelle, si vous souhaitez résoudre votre problème, vous devez créer
jdialog # modalitype (aplications ?? ?) code> ou
jwindow code> alors vous pouvez afficher
joptionpane code>
ok merci, mais qu'en est-il d'utiliser une manipulation comme dans la réponse acceptée de POST Stackoverflow.com/questions/4542924/... , va-t-il résoudre mon problème?
Je suppose que seulement un joptionpane peut exister ce post ne peut pas aider
@Javasa 1) code> est essentiellement possible de masquer JOPTIONPANE,
2) CODE> Personne ne doit garantir que le bloc de code sera exécuté actuel ou précédent à partir de JOPTIONSPANESH HIDDED,
3) < / Code> Ce composant est là pour les exécutions de code de bloquage (travail en tant que sémaphore), bloquer user_input,
4) code> La dernière propriété est d'appeler (personnalisé joptionpane avec jbutton (s) ajouté manuellement) mybutton.doclick () ;, alors joptionpane est parti
5) code> Je pense que cela résoudra rien (lien que vous avez posté) :-)
Je recommanderais que vous
DONE SWINGWORKER () CODE> appelée lorsque la tâche d'arrière-plan est terminée, disposez du JDialog. li>
- Alors le prochain JOPTIONNEPANE sera appelé immédiatement. LI>
ul>
Par exemple, le code suivant utilise un thread.sleep (3000) pour un sommeil de 3 secondes pour imiter une tâche d'arrière-plan qui prend 3 secondes. Il fera ensuite fermer la première boîte de dialogue et montrera la seconde: p> xxx pré> p>
Je suppose que je n'ai pas besoin de l'ouvrier battant parce que ma tâche de fond est détenue sur mon serveur, après avoir validé la carte, il renvoie une OK ACK à l'interface graphique du client et le jeu commence automatiquement
Je ne suis pas sûr que vous n'ayez pas besoin d'un swingworker ou d'une sorte de fil de fond. Comment votre code d'interface graphique dit-il au serveur de valider la carte? Est-ce que cela le fait de manière bloquante ou est-il de manière non bloquante? Comment l'interface graphique attend-t-elle la réponse du serveur? Comment est-il notifié? Toutes ces choses peuvent attacher votre fil d'événement swing. Mais ... c'est votre application, alors faites-le comme vous le voyez.
Ok, j'essaie de rendre les choses plus claires, lorsque mon interface graphique se connecte d'abord à mon serveur, il ouvre un nouveau thread d'écoute (implémentation annulable) dans le client qui attend la commande à venir dans la fonction DataGuThetStream par simple appel à la fonction de réveil sur le membre M_InputStream . L'interface graphique indique au serveur de valider la carte sur un écran de bâtiment de la carte spéciale après avoir cliqué sur un bouton SWING "VALIDATE BOARD", il est bloqué car j'ai besoin du deuxième joueur de la table pour construire son propre conseil pour l'adversaire et seulement à
Commencez une partie lorsque deux planches ont été construites par les deux joueurs assis à côté d'une table de jeu. Donc, il bloque que je suppose que je n'ai pas besoin de mon interface graphique réactive après l'envoi, il suffit d'attendre, alors je ne pense pas que le téléchargement de mon conseil après avoir cliqué sur le bouton Validate entraînera l'insuffisance de l'interface graphique, car toutes ces actions. sont vraiment rapides, que pensez-vous?
S'ils sont très rapides, alors pas besoin d'un joptionpane de dire au joueur d'attendre la validation. Sinon, vous aurez besoin d'un fil de fond. Mais seulement vous pouvez dire. Si votre programme se fige de manière visible à aucun moment, cela indique la nécessité d'un fil. De toute façon, beaucoup de chance!
Non, l'attente est que le joueur rival ait fini de construire son conseil d'administration pour vous - et non pour une reconnaissance de validation de votre propre conseil. Ce n'est que lorsque les deux planches ont été validées, elles sont envoyées en même temps par le serveur à chaque client des deux joueurs de manière croisée, chaque tableau des utilisateurs a construit pour ses rivaux et le jeu commence. Je suppose que tout chaque code de communication rapide qui est lancé à partir de JButtonActionPerformed (EDT) est un acte interdit.Ah je suis raison? Quoi qu'il en soit, il est un peu tard ici, alors je vais essayer des choses demain et vous mettra à jour :)
+1, celui-ci est une bonne alternative, bien que cette réponse m'a mis dans une confusion, tout en répondant sur un autre fil :-), j'ai utilisé un code> Minuterie code> au lieu de swingworker code> , si vous vous demandez que mon approche est mauvaise :-)
Désolé, je ne comprends pas bien votre question, voulez-vous dire que vous voulez fermer une joptionpane d'un autre?
Non, je voulais dire que si l'utilisateur n'est pas assez rapide pour cliquer sur OK sur un joptionpane, il restera à l'arrière-plan, après quelquefois, il obtiendra une autre optionpane, puis il devra fermer deux joptionspanes, donc je veux donc pouvoir annuler précédemment. Joptionpane si ce second joptionpane est déjà venu (et l'utilisateur n'a pas rejeté le premier)
Un joptionpane est généralement modal (il existe des exceptions bien sûr), alors je me demande comment l'utilisateur était même capable d'élever un deuxième joptionpane lorsque le premier est visible? Pouvez-vous créer et poster un petit programme compilable et annoncable qui démontre votre problème et que nous pouvons tester, modifier et éventuellement corriger, un SSCCE une>?
ok j'ai généré un exemple de travail vraiment simple où dois-je le télécharger?
@Javasa: Modifiez votre message et y inclure.
Merci pour votre SSCCE. J'ai modifié le code dans ma réponse ci-dessous.