Hardware : Arl-Guhr et 8 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

[Java] Faire attendre une partie du programme

 
n°56415
Magniacx
Posté le 11-03-2007 à 16:00:40  profilanswer
 

Bonjour,
 
J'explique brièvement la situation : je programme un monopoly en 3D en java, j'utilise pour cela principalement les classes java3D et Swing.
J'ai mon "arrière plan de base" qui affiche le plateau pions etc. et viennent parfois se mettre par dessus des fenêtres de choix etc.
 
Mon problème est le suivant : je désire afficher une fenêtre par dessus et faire attendre le programme qu'on ait fermé cette fenêtre.
 
Exemple : je lance un objet Création qui va permettre la création de la partie, après ça, je vais lancer l'affichage, le placement des pions etc., mais j'ai besoin que le programme attende que j'aie fini la création pour continuer son exécution. si je ne le fais pas attendre, il va prendre les paramètres de base de création qui sont tous null, et je vais donc planter lamentablement ...
 
Comment faire attendre le programme que j'aie fini la création pour continuer l'exécution ?

n°56416
LostSoul
Vivement TES V
Posté le 11-03-2007 à 16:22:35  profilanswer
 

Sous windows ce serait une boîte de dialogue modale qu'il te faudrait. Chépu comment on fait en Swing pour ça. Un peu comme un splash screen avec une progress bar qui avance le temps que ton truc s'initialise et qui empèche de cliquer sur la fenêtre de jeu


---------------
(pas de signature ce jour)
[ www.in-wonderland.net | www.start64.com | www.majorgeeks.com ]
n°56420
Magniacx
Posté le 11-03-2007 à 17:07:19  profilanswer
 

Swing a un objet qui permet déjà de faire ça : JOptionPane
 
Malheureusement, JOptionPane n'a que des trucs tout faits, pas suffisants pour ce que je veux faire ...
 
Je pense avoir trouvé ce qui met en pause l'exécution :
 
1592:     EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
1593:     try
1594:       {
1595:         while (! f.isClosed())
1596:           {
1597:             if (EventQueue.isDispatchThread())
1598:               {
1599:                 // The getNextEventMethod() issues wait() when no
1600:                 // event is available, so we don't need do explicitly wait().
1601:                 AWTEvent ev = queue.getNextEvent();
1602:                 // This mimics EventQueue.dispatchEvent(). We can't use
1603:                 // EventQueue.dispatchEvent() directly, because it is
1604:                 // protected, unfortunately.
1605:                 if (ev instanceof ActiveEvent)
1606:                   ((ActiveEvent) ev).dispatch();
1607:                 else if (ev.getSource() instanceof Component)
1608:                   ((Component) ev.getSource()).dispatchEvent(ev);
1609:                 else if (ev.getSource() instanceof MenuComponent)
1610:                   ((MenuComponent) ev.getSource()).dispatchEvent(ev);
1611:                 // Other events are ignored as per spec in
1612:                 // EventQueue.dispatchEvent
1613:               }
1614:             else
1615:               {
1616:                 // Give other threads a chance to become active.
1617:                 Thread.yield();
1618:               }
1619:           }
1620:       }
1621:     catch (InterruptedException ex)
1622:       {
1623:         // If we get interrupted, then leave the modal state.
1624:       }
1625:     finally
1626:       {
1627:         // Clean up the modal interceptor.
1628:         lp.remove(modalInterceptor);
1629:  
1630:         // Remove the internal frame from its parent, so it is no longer
1631:         // lurking around and clogging memory.
1632:         Container parent = f.getParent();
1633:         if (parent != null)
1634:           parent.remove(f);
1635:       }
1636:   }

n°56427
Ashe
reenignE esreveR
Posté le 11-03-2007 à 18:41:16  profilanswer
 

Si c'est pour dire que le programme se charge, y a ProgressMonitor
Si c'est pour un wizard ou tu choisis les options du jeu => http://java.sun.com/developer/tech [...] ng/wizard/


---------------
Globe trotter/SDF - Reims, France
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°56435
Magniacx
Posté le 11-03-2007 à 19:25:50  profilanswer
 

En fait je cherche à faire ceci :
 
Pour acheter des maisons j'utilise la classe Acheter :
 
Acheter ach = new Acheter(achats); // nouvelle fenêtre avec les options d'achats de maisons
ach.getModif(); // va aller chercher les modifications et les appliquer
 
Il est évident que si je laisse ça comme ça, il va créer une nouvelle fenêtre d'achat et immédiatement après, il va prendre les modifications, qui n'existent pas encore ! (l'utilisateur n'est pas plus rapide que l'ordinateur) ...
 
Je cherche donc une technique pour qu'il attende que l'utilisateur ait fini ...

n°56437
Ashe
reenignE esreveR
Posté le 11-03-2007 à 19:32:37  profilanswer
 

Ben JOptionPane cree un JDialog qui est modal, donc ca continuera pas :spamafote:
(et tu peux implementer un JDialog toi meme aussi)


---------------
Globe trotter/SDF - Reims, France
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°56439
Magniacx
Posté le 11-03-2007 à 20:26:41  profilanswer
 

Le truc c'est que dans Acheter il ya des boutons ... et on sait pas les ajouter à un JDialog ... si ?

n°56441
Ashe
reenignE esreveR
Posté le 11-03-2007 à 21:11:29  profilanswer
 

Code :
  1. JButton button = new JButton("blah" );
  2. dialog.add( button );


---------------
Globe trotter/SDF - Reims, France
Joy, beautiful spark of the gods, Daughter of Elysium, We enter fire imbibed, Heavenly, thy sanctuary.
Trombi Matbe
n°56445
LostSoul
Vivement TES V
Posté le 11-03-2007 à 22:50:17  profilanswer
 

Heureusement que si, sinon on serait dans la merde :p


---------------
(pas de signature ce jour)
[ www.in-wonderland.net | www.start64.com | www.majorgeeks.com ]
n°56458
Magniacx
Posté le 12-03-2007 à 11:55:29  profilanswer
 

Cool, merci ! :)


Aller à :
Ajouter une réponse