2009-01-05 15 views
8

Właśnie zacząłem bawić się z JLine, aby analizować dane wejściowe znaków w trybie konsoli. Wygląda na to, że działa dobrze, ale zastanawiam się:Parsowanie wejścia klawiatury Java w aplikacji konsolowej

Czy w JLine dostępny jest niezablokowany sposób sprawdzania, czy dostępne są znaki? (Czyli jak kbhit() w systemie Windows).

Przypuszczam, że zawsze mogła owinąć wprowadzanie danych z klawiatury w swoim wątku następnie oferuje znaków klawiaturowych w wątku bezpieczny kolejce do głównego wątku, ale wydaje się, że powinna być niepotrzebne.

EDIT: Jest to parsowanie znaków po znaku. Nie zamierzam używać GUI. Typowe wejścia/wyjścia InputStream w Javie w trybie konsoli wymagają najpierw naciśnięcia klawisza Enter (na przykład tylko buforowanego wejścia). Proszę nie mówić mi, że wprowadzanie znaków po znaku w trybie konsoli jest niemożliwe w Javie; nie jest. JLine robi to za pomocą przenośnego interfejsu z implementacją zależną od platformy.

Edycja aktualizacja: Udało mi się włamać razem klasę pomocniczą zrobić blokowania I/O w wątku roboczego (przy JLine dla jednej znaku I/O, ostrzeżenie: trzeba analizować Ctrl-C siebie!) & następnie komunikować się za pośrednictwem zsynchronizowanej kolejki z procedurą isempty(). To, co teraz robię, jest w porządku, ale naprawdę chciałbym poznać dobry sposób na zrobienie tego w przyszłości.

+4

Czy możesz opublikować wyciętą odpowiedź? Wygląda bardzo interesująco. – OscarRyz

Odpowiedz

4

Wydajesz się być na dobrej drodze.

Myślę, że "właściwą" drogą do tego jest wątek roboczy, który przelewa wszystkie blokujące operacje we/wy do kolejki nieblokującej. Hava spójrz na ConcurrentLinkedQueue z java.util.concurrent.