(Netbeans) Bei TimeUnit.Seconds,Sleep() hängt sich das komplette Programm auf..

Lord.Djerun

Mitglied
Moin Moin,

also das try catch hat mir Netbeans ausgespuckt, als ich TimeUnit... eingegeben hab :bahnhof:
Jedenfalls wenn ich jetzt auf den Button klicke passiert garnichts:noe:
Könnt ihr mir da helfen? 🙂






Java:
private void LeichtClicked(java.awt.event.MouseEvent evt) {                               

        for (counter = 0; counter < 10; counter++) {

            Ausblenden();
            z = (int) (Math.random() * 4 + 1);
            zz = String.valueOf(z);
            switch (zz) {
                case "1":
                    GruenPanel.setVisible(true);
                    break;
                case "2":
                    RotPanel.setVisible(true);
                    break;
                case "3":
                    BlauPanel.setVisible(true);
                    break;
                case "4":
                    GelbPanel.setVisible(true);
                    break;
                  
            }
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException ex) {
                Logger.getLogger(Simon_Says.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
 
Zuletzt bearbeitet:
Du müsstest uns nur verraten was denn passieren soll 😉
Ohne dieser Information können wir nur schwer sagen was der Fehler sein wird.
 
Tschuldige 😀

Also ich möchte, dass er eine Zufallszahl generiert & anhand dieser dann eben, eines der 4 Panels einblendet.
Dieses soll dann einfach ein paar Sekunden stehen bleiben & dann soll das ganze durch die for schleife von vorne losgehen.

Reicht das soweit? :rtfm:
 
Ok und was bedeutet "Jedenfalls wenn ich jetzt auf den Button klicke passiert garnichts"?
Friert alles ein?
Vergeht etwas Zeit und wird erst dann 1 Panel eingeblendet?
 
Dann wird das Problem vermütlich mit deinen "sleep" zusammenhängen.
Du blockierst damit den Thread der für das "neuzeichnen" der Oberfläche zuständig ist. Daher kannst du solange deine Schleife "arbeitet" nicht mehr mit der GUI interagieren bzw. werden Änderungen auf dieser sichtbar ("sie hängt sich auf").

Lagere deine Schleife in einen SwingWorker oder eigenen Thread aus, dann sollte es klappen.
In dieser Hinsicht ein paar Stichwörter zur Problematik: EventDispatchThread (EDT), SwingWorker

PS: Wenn du dein Programm 1 Minute lang laufen lässt sollte es von alleine wieder funtkionieren und 1 Panel angezeigt werden. Weil dann ist deine Schleife fertig.
 
Zuletzt bearbeitet:
Java:
    private void LeichtClicked(java.awt.event.MouseEvent evt) {                               

        for (counter = 0; counter < 10; counter++) {

            Ausblenden();
            z = (int) (Math.random() * 4 + 1);
            zz = String.valueOf(z);
            switch (zz) {
                case "1":
                    GruenPanel.setVisible(true);
                    System.out.println("1");
                    break;
                case "2":
                    RotPanel.setVisible(true);
                    System.out.println("2");
                    break;
                case "3":
                    BlauPanel.setVisible(true);
                    System.out.println("3");
                    break;
                case "4":
                    GelbPanel.setVisible(true);
                    System.out.println("4");
                    break;

            }
            SS2 pause;
            pause = new SS2();
            pause.start();
        }
    }                              

    public void Ausblenden() {
        BlauPanel.setVisible(false);
        GelbPanel.setVisible(false);
        GruenPanel.setVisible(false);
        RotPanel.setVisible(false);
    }

    class SS2 extends Thread {

        @Override
        public void run() {
            try {
                sleep(5000);
            } catch (InterruptedException e) {
            }
            System.out.println("PAUSE");
            Ausblenden();
        }

    }

So hab ich das ganze jetzt mal versucht...
Habe dabei nur ein "kleines" Problem :noe:
Er gibt mir folgendes aus
Java:
1
1
4
4
3
4
3
2
4
2
PAUSE
PAUSE
PAUSE
PAUSE
PAUSE
PAUSE
PAUSE
PAUSE
PAUSE
PAUSE

Das Problem ist nur, dass er quasi nur 1 Panel 5 Sekunden zeigt, statt 10 panels jeweils 5 sekunden...
& die Pause sollte eigentlich auch den Zwischen den Zahlen sein ;(

Also zum Verständnis:
Die Zahlen die er ausgibt stehen jeweils für ein Panel.
Das Programm macht jetzt quasi erst alle panels ohne pause & danach führt er die Pause aus :rtfm:

Würde mich über weitere Hilfe freuen 🙂
 
Zuletzt bearbeitet:
In deiner for-Schleife startest du den Thread, aber dieser läuft dann natürlich asynchron.
Sprich deine for-Schleife wird komplett durchlaufen und diese startet dann eben 10 Threads die nebenbei laufen.
Du musst natürlich die ganze for-Schleife auslagern nicht nur das sleep!
 

Zurück
Oben