Oppure

Loading
01/07/08 12:58
VaLeRiO
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.

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


E la funzione toggleAll:

private void toogleAll(final boolean toogle) { // CHECK THE FREEZE.

		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				
				bNext.setEnabled(toogle);
				bAgain.setEnabled(!toogle);
				jspMoneyBet.setEnabled(toogle);
				
				for (int i = 0 ; i < jcbCards.length ; i++) jcbCards[i].setEnabled(toogle);
				
			}
		});

	}


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

bAgain.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
								// Fa un pò di lavori ecc.. guarda sopra.
				
				toogleAll(true);
				
			}
		});


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 01/07/08 23:58
aaa
02/07/08 15:54
VaLeRiO
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ì:

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


Probabilmente questione di puntatori credo.
aaa