2015-03-06 37 views
5

Czy istnieje sposób sprawdzenia, czy użytkownik wpisuje w oknie konsoli w języku Java?Sprawdź, czy użytkownik wpisuje w oknie konsoli

Chcę, aby program wydrukował cokolwiek wpisuję, gdy coś piszę, w przeciwnym razie wydrukuję komunikat "Brak danych wejściowych".

Najtrudniejszą częścią jest to, że chcę, żeby program pętlił i drukował "Brak danych wejściowych", a kiedy wpisał "abc", natychmiast wydrukował "abc".

Próbowałem użyć skanera, aby to zrobić jak:

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

Ale kiedy prowadził ją, jeśli nie wpisuj nic, program po prostu utknął tam bez drukowania „No input”. W rzeczywistości "Brak danych wejściowych" nigdy nie zostało wydrukowane.

+1

Który OS/Terminal używasz? – Razib

+0

Coś wzdłuż tych linii: http://stackoverflow.com/questions/9545388/how-can-i-detect-arrow-keys-in-java-console-not-in-gui –

+0

while (1) ... how jest 1 stan? Przeciwko temu, co porównujesz? – Stultuske

Odpowiedz

1

Z linii poleceń nie widzę szansy na otrzymanie danych przed naciśnięciem przycisku "Enter". (W przeciwieństwie do "onKeyDown/UP")

Ale biorąc pod uwagę & akceptując to ograniczenie, prostym rozwiązaniem jest użycie Reader.ready():

(..returns) True jeśli następny read() jest zagwarantowane, aby nie blokować dla wejścia , false w przeciwnym razie.

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"); 
      } 
     } 
    } 
} 
Powiązane problemy