2012-04-07 5 views
0

J'ai un problème avec (je pense) un minuteur swing. J'ai écrit du code qui a bien fonctionné, puis je l'ai déplacé sur mon nouvel ordinateur où il a rapidement échoué. J'ai écrit une classe de GUI (basé sur JFrame) avec cette méthode:Java problèmes de minuterie swing

public void Splash(){ 
    mainPanel.add(Empous.splash, BorderLayout.CENTER); 
    while(Empous.splash.GetCount() < 3){ 
       //System.out.println(Empous.splash.GetCount()); 
    } 
} 

La méthode est appelée d'une autre classe. Ce type Empous.splash est une classe JPanel qui exécute simplement l'animation splash. Il le fait avec une minuterie de swing. Au sein de la classe d'accueil, l'auditeur ajuste le contenu de mon image via le code suivant:

private class TimerListener implements ActionListener{ 
    public void actionPerformed(ActionEvent evt) { 
     counter+=1; 
     if (counter==1){ 
      title2.setText("In Association With"); 
      title1.setText("El Pollo Diablo Productions"); 
     } 
     if (counter==2){ 
      remove(title2); 
      remove(title1); 
      repaint(); 
     } 
     if (counter==3){ 
      timer.stop(); 
     } 
    } 
} 

Maintenant, si cette déclaration d'impression dans le premier bloc est commenté, mon programme va geler après arrêt de la temporisation. Si je le décommente, le programme imprimera la valeur du compteur, puis continuera à droite comme pluie. Je voudrais sortir la déclaration d'impression et faire tourner la boucle while sans faire quoi que ce soit, mais je ne peux pas faire cela comme cela se passe actuellement. Toute aide appréciée.

+3

Vous devriez probablement créer un [SSCCE] (http://sscce.org), ou au moins poster plus de code. – Jeffrey

+2

Veuillez lire [Conventions de nommage Java] (http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367) et respectez-les lorsque vous codez :-) –

+0

Voir [Loop doesn Ne pas voir la valeur modifiée sans une instruction d'impression] (https://stackoverflow.com/questions/25425130/loop-doesnt-see-changed-value-without-a-print-statement) pour l'explication de la raison pour laquelle l'instruction print une différence. – Boann

Répondre

4

Vous regardez à enfreindrait les règles de filetage Swing avec cette boucle while:

while(Empous.splash.GetCount() < 3){ 
    //System.out.println(Empous.splash.GetCount()); 
} 

Pourquoi avez-vous même cela depuis que vous avez déjà une minuterie Swing qui va gérer ce genre de chose sans freesing le fil des événements?

Pour des conseils plus spécifiques cependant, postez un sscce.

+0

Ah, je me suis dit que j'avais dépassé mes connaissances de Java quand je suis tombé sur ça. Je ne comprends toujours pas vraiment certains concepts de threading, donc je vais en lire plus - merci pour les conseils. – Angineer