# Endlosschleife beenden



## Guest (8. Aug 2005)

Hallo zusammen,

such wie verrückt und finde leider nix. Ein kleines Progrämmchen (reine Konsolenanwendung) soll die ganze Zeit in einer Endlosschleife laufen und am Anfang jedes Schleifendurchgangs einmal überprüfen ob inzwischen ein "q" gedrückt wurde, womit sich das Progrämmchen beendet (also aus der Schleife rausgeht). Wie macht man sowas? Hat jemand einen kleinen Tipp?

Danke schonmal


----------



## mic_checker (8. Aug 2005)

Willst du das machen im Sinne von :



> > Möchten Sie das Programm jetzt beenden ? (J/N)
> > N
> > ..... //etc.
> > Möchten Sie das Programm jetzt beenden ?
> ...



?

Dann würde ich einfach von der Standardeingabe einlesen, gucken ob ein J gedrückt wurde und andernfalls die Schleife weiter durchlaufen lassen...


----------



## Guest (8. Aug 2005)

Danke erstmal, aber das Programm soll ja gar nicht warten, bis einer was drückt. Es soll feststellen: Ah, es wurde keine Taste gedrückt, also starte ich den nächsten Durchlauf, und eben ansonsten beenden.


----------



## comp89 (8. Aug 2005)

es wartet also nur darauf, dass man etwas eingibt!?


----------



## L-ectron-X (8. Aug 2005)

Eine kleine Demonstration. Wer will, kann den fehlenden Teil ergänzen. :wink: 

```
import java.io.*;
import java.text.*;
import java.util.*;

public class ConsoleBeenden {
   public static void main(String[] args) {
      ConsoleBeenden cb = new ConsoleBeenden();
   }
   
   public ConsoleBeenden() {
      new ZeitAusgabe().start();
      new Eingabe().start();
   }
   
   //Eine innere Klasse zum Lesen von der Tastatur
   class Eingabe extends Thread {
      BufferedReader br;
      
      public Eingabe() {
         br = new BufferedReader(new InputStreamReader(System.in));
      }
      
      public void run() {
         char c = 0;
         while(c != 'q') { //Schleife prüft jede Eingabe auf "q"
            try {
               c = (char)br.read();
            }
            catch(IOException e) {
               System.out.println("Fehler beim Lesen von der Tastatur!");
            }
         }
         System.exit(0);
      }
   }
   
   //Eine Uhr, die auf einer Zeile in der Konsole läuft (innere Klasse)
   class ZeitAusgabe extends Thread {
      public void run() {
         String zeit = null;
         while(true) { //Endlosschleife
            DateFormat df = new SimpleDateFormat("kk:mm:ss");
            zeit = df.format(new Date());
            System.out.print(zeit);
            try {
               Thread.sleep(1000);
            }
            catch(InterruptedException e) {
               System.out.println("Fehler während CPU-Freigabe");
            }
            for(int i = 0, j = zeit.length(); i < j; i++) {
               System.out.print("\b");
            }
         }
      }
   }
}
```


----------



## MPW (8. Aug 2005)

Ne, das ist nicht das, was er wil...was er will macht aber keinen sinn...es seiden es gibt Füllmaterial.

Macht die Schleife, so fern q nicht gedrückt wurde etwas? Wie z.B. in L-ectron-X' Beispiel? Sonst macht es ja keinen sinn..sie weiterlaufen lassen.

Das da oben erzeugt doch aber so weit ich weiß eine Eingabezeile, die erst mit enter bestätigt werden muss, oder?
Das willst du doch eigentlich nicht.

Das was du möchtest geht glaube ich in Java nicht - wurde schon oft diskutiert, such mal nach Konsoleneingabe ohne bestätigen oder so...

Das was du willst basiert nämlich auf einer art Hotkey, soetwas ist nur native möglich.


----------



## Bleiglanz (9. Aug 2005)

unsichtbaren JFrame und Eventlistener?


----------



## Guest (9. Aug 2005)

Huch, hier hat sich ja noch was entwickelt... Grundsätzlich macht die Schleife schon Sinn, hat einen Haufen zu tun und muss die ganze Zeit laufen. und am Anfang immer überprüfen, ob irgendwas eingegeben wurde. Bei "q" soll er sich beenden, und bei ein paar anderen Buchstaben mal auf User-Anforderung was anderes machen. Der nächste Schleifendurchlauf soll halt nicht erst auf ein Enter warten (müsste ja die ganze Zeit davorstehen )

@Bleiglanz: Ja, das das so evtl gehen könnte, ist mir so halbwegs klar, nur wollte ich mir das bei einer reinen Konsolenanwendung sparen. Ehrlich gesagt habe ich mich mit GUI-Zeugs unter Java noch nicht wirklich beschäftigt (bin hier bei den Anfängerfragen genau richtig).


----------



## Bleiglanz (9. Aug 2005)

in der Art dürfte das mit Java schwer sein, weil die IO nun mal "blockiert" 

also einen eigenen Thread, der mit read von der Tastatur liest und dann ein globales Flag setzt, das in der Schleife ausgewertet wird


----------



## Gast (9. Aug 2005)

Bei näherer Betrachtung von L-ectron-X Beispiel: so sollte es doch eigentlich funzen, oder nicht?! Da kann ja der Eingabethread so lange auf Enter warten, wie er will, die Hauptschleife läuft doch weiter... Gleich mal ausprobieren...


----------



## MPW (9. Aug 2005)

jaja, aber bleibt das dann nicht hängen, wenn man zweimal ein System.in macht?
Irgendwie ist das schon eine schwäche von Java...es müsste auch Hotkeys geben..das nervt irgendwie.

Ähm, geht nix über 'ne Gui? Muss das wirklich so sein, über eine Gui gibt's dutzende Möglichkeiten...


----------

