2017-02-25 6 views
0

Das scheint ein einfaches Problem zu sein, aber ich kann es nicht lösen. Ich muss Ausgabe (von einer Variablen) auf die Konsole drucken, bis der Benutzer eine beliebige Taste drückt. Der Druck wird in einer while-Schleife als solche durchgeführt:Druckausgabe, bis die Taste gedrückt wird

int i; 
while((i=input.read())!=-1){ 
    System.out.print((char)i); 
} 
input.close(); 

Das Problem ist, dass der Eingangsstrom nie erreicht sein Ende wartet nur für mehr Zeichen zu kommen, so dass die Ausführung von mehr Code zu blockieren. Es wird für den Benutzer ziemlich offensichtlich sein, wann die Ausgabe zu stoppen ist, daher bin ich damit einverstanden, dem Benutzer diese Verantwortung zu geben. Es spielt keine Rolle, wie der Benutzer der Anwendung sagt, dass er aufhören soll, solange es schnell ist (zB Drücken von Leerzeichen, Eingabe oder irgendein anderer spezifischer Schlüssel ist in Ordnung).

Vielen Dank im Voraus,
vikarjramun

Antwort

1

Die erste Lösung kam ich mit der Konsole Eingabe wurde Threading. Der Thread aktualisiert eine Variable, auf die der Druckcode zugreifen kann, sodass Sie sie vor jeder Druckanweisung prüfen können.

import java.util.Scanner; 
import java.util.concurrent.atomic.AtomicBoolean; 

public class RunUntilKeyPressed { 
    static AtomicBoolean hasUserPressedKey = new AtomicBoolean(false); 

    public static void main(String[] args) { 

     Thread t = new Thread(() -> { 
      Scanner scan = new Scanner(System.in); 
      System.out.println(scan.next()); 
      hasUserPressedKey.set(true); 
      scan.close(); 
     }); 
     t.start(); 

     while(!hasUserPressedKey.get()) { 
      System.out.println(hasUserPressedKey); 
     } 
    } 
} 

Dieser Code wird ausgeführt, bis der Benutzer eine beliebige Taste (außer Leerzeichen) drückt und daran teilnehmen, wie das ist, wenn die scan.next() Methode Eingang erhält.

+0

Dieser Code funktioniert möglicherweise nicht korrekt, es sei denn, Sie Delcare hasUserPressedKey als flüchtig oder verwenden AtomicBoolean anstelle von einfachen boolean – SergGr

+0

@SergGr guten Punkt. Ich werde die Änderung machen – Chris

+0

Danke, ich werde das ausprobieren – vikarjramun

Verwandte Themen