Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Help AWT-Dispatching Thread
Forum - Java - Help AWT-Dispatching Thread

Avatar
VaLeRiO (Ex-Member)
Pro


Messaggi: 114
Iscritto: 28/06/2008

Segnala al moderatore
Postato alle 14:58
Martedì, 01/07/2008
Ciao a tutti, avrei bisogno una manina per lo sviluppo di un Poker in Java. Ho completato tutta la parte del gioco, ora sto facendo l'interfaccia grafica con elementi Swing per poi passare a farlo con Java2D.

Il problema che ho è questo: quando l'utente ha scelto le carte da cambiare (tramite checkBoxs) preme il button Next.

Next poi fa un pò di cose che non credo ci interessino e infine chiama un metodo che disattiva tutti gli elementi così che una volta cambiate le carte può visualizzare i risultati dell'estrazione ma non può modificare più niente se non prima premendo un'altro pulsante (Again) che riattiverà la grafica.

Codice sorgente - presumibilmente Java

  1. bNext.addActionListener(new ActionListener() {
  2.                         public void actionPerformed(ActionEvent e) {
  3.                                
  4.                               // Fa un pò di operazioni che a noi non credo interessino al fine del debug. Se così fosse posto anche quella parte.
  5.                                
  6.                                 toogleAll(false);
  7.                                
  8.                         }
  9.                 });



E la funzione toggleAll:

Codice sorgente - presumibilmente Java

  1. private void toogleAll(final boolean toogle) { // CHECK THE FREEZE.
  2.  
  3.                 SwingUtilities.invokeLater(new Runnable() {
  4.                         public void run() {
  5.                                
  6.                                 bNext.setEnabled(toogle);
  7.                                 bAgain.setEnabled(!toogle);
  8.                                 jspMoneyBet.setEnabled(toogle);
  9.                                
  10.                                 for (int i = 0 ; i < jcbCards.length ; i++) jcbCards[i].setEnabled(toogle);
  11.                                
  12.                         }
  13.                 });
  14.  
  15.         }



Già che ci sono metto anche l'ascoltatore del bottone "Again" anche se il problema del freeze si presenta prima di premerlo.

Codice sorgente - presumibilmente Java

  1. bAgain.addActionListener(new ActionListener() {
  2.                         public void actionPerformed(ActionEvent e) {
  3.                                                                 // Fa un pò di lavori ecc.. guarda sopra.
  4.                                
  5.                                 toogleAll(true);
  6.                                
  7.                         }
  8.                 });



Ecco, il problema è che alla pressione di Next il programma si congela, cioè la finestra si "impalla". Provando a fare meno operazioni nel toogleAll ad es. togliendo il for funziona .. però io ho la necessità di metterli tutti off oppure on.

Ho provato come potete vedere a lanciare con l'invokeLater. Ho provato anche con un Thread. Niente, si blocca sempre.

Qualche consiglio?

Grazie per l'aiuto e spero di non essere stato troppo disordinato.

Ultima modifica effettuata da VaLeRiO il 02/07/2008 alle 1:58
PM Quote
Avatar
VaLeRiO (Ex-Member)
Pro


Messaggi: 114
Iscritto: 28/06/2008

Segnala al moderatore
Postato alle 17:54
Mercoledì, 02/07/2008
Trovato l'errore!

Era perchè prima di fare il toogle rinstanziavo le JCheckBox passando a parametro i nuovi nomi delle carte.

E' bastato fare così:

Codice sorgente - presumibilmente Java

  1. if(jcbCards[i] == null) jcbCards[i] = new JCheckBox(hand.getCards()[i].toString());
  2.                         else jcbCards[i].setText(hand.getCards()[i].toString());



Probabilmente questione di puntatori credo.

PM Quote