Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
(Netbeans) Bei TimeUnit.Seconds,Sleep() hängt sich das komplette Programm auf..
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);
}
}
}
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.
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.
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:
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!