2015-03-06 8 views
5

Gibt es eine Möglichkeit zu überprüfen, ob der Benutzer das Konsolenfenster in Java eintippt?Überprüfen Sie, ob der Benutzer das Konsolenfenster eingibt

Ich möchte das Programm drucken, was auch immer ich tippe, wenn ich etwas eintippe, sonst "No input" ausdrucken.

Der schwierige Teil ist, ich möchte das Programm halten Schleife und Ausdrucken "Keine Eingabe", und dann, wenn ich "abc" eingeben, würde es sofort "abc" ausdrucken.

Ich habe versucht, Scanner zu verwenden, dies zu tun, wie:

Scanner s = new Scanner(System.in); 
while(1){ 
    if(s.hasNext()) System.out.println(s.next()); 
    else System.out.println("No input"); 
} 

Aber wenn ich es lief, wenn ich nichts, das Programm eingegeben haben gerade dort stecken, ohne „Kein Eingang“ zu drucken. Eigentlich wurde "Keine Eingabe" nie gedruckt.

+1

Welche OS/Terminal verwenden Sie? – Razib

+0

Etwas in dieser Richtung: http://stackoverflow.com/questions/9545388/how-can-i-detect-arrow-keys-in-java-console-not-in-gui –

+0

while (1) ... wie ist 1 eine Bedingung? Gegen was vergleichen Sie es? – Stultuske

Antwort

1

Von einer Befehlszeile sehe ich keine Möglichkeit, die Eingabe vor dem Drücken der "Eingabetaste" zu erhalten. (Im Gegensatz zu "onKeyDown/Up")

Aber wenn man bedenkt & diese Einschränkung zu akzeptieren, eine einfache Lösung ist Reader.ready() zu verwenden:

(..returns) True, wenn die nächste read() garantiert nicht für die Eingabe zu blockieren , false sonst.

import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.util.Scanner; 

public class Solution { 

    public static void main(String[] args) throws IOException { 
     final Reader rdr = new InputStreamReader(System.in); 
     final Scanner s = new Scanner(rdr); 
     while (true) { 
      if (rdr.ready()) { 
       System.out.println(s.next()); 
      } else { 
       // use Thread.sleep(millis); to reduce output frequency 
       System.out.println("No input"); 
      } 
     } 
    } 
} 
Verwandte Themen