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 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.
Eine kleine Demonstration. Wer will, kann den fehlenden Teil ergänzen. :wink:
Code:
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");
}
}
}
}
}
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).
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...
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...