Apakah ada cara mudah untuk membaca karakter tunggal dari konsol saat pengguna mengetiknya di Java? Apa itu mungkin? Saya sudah mencoba dengan metode ini tetapi semuanya menunggu pengguna untuk menekan tombol enter :
char tmp = (char) System.in.read();
char tmp = (char) new InputStreamReader(System.in).read ();
char tmp = (char) System.console().reader().read(); // Java 6
Saya mulai berpikir bahwa System.in tidak mengetahui input pengguna sampai enter ditekan.
Anda perlu mengetuk konsol Anda ke mode mentah. Tidak ada cara independen platform bawaan untuk sampai ke sana. jCurses mungkin menarik.
Pada sistem Unix, ini mungkin berhasil:
Misalnya, jika Anda ingin memperhitungkan waktu di antara penekanan tombol, berikut kode contoh untuk mencapainya.
sumber
stty cooked </dev/tty
harus dijalankan ketika program perlu kembali ke mode buffer, dan pasti sebelum program keluar.Tidak ada cara portabel untuk membaca karakter mentah dari konsol Java.
Beberapa solusi yang bergantung pada platform telah disajikan di atas. Tetapi untuk benar-benar portabel, Anda harus meninggalkan mode konsol dan menggunakan mode windowing, misalnya AWT atau Swing.
sumber
System.Console.ReadKey
yang berfungsi di semua platform. Java juga mendistribusikan JVM dan JRE untuk setiap platform dengan pustaka dan implementasi yang bergantung pada platform, jadi itu bukan alasan.Saya telah menulis RawConsoleInput kelas Java yang menggunakan JNA untuk memanggil fungsi sistem operasi Windows dan Unix / Linux.
_kbhit()
dan_getwch()
dari msvcrt.dll.tcsetattr()
untuk mengalihkan konsol ke mode non-kanonik,System.in.available()
untuk memeriksa apakah data tersedia danSystem.in.read()
untuk membaca byte dari konsol. ACharsetDecoder
digunakan untuk mengubah byte menjadi karakter.Ini mendukung input non-pemblokiran dan pencampuran mode mentah dan input mode jalur normal.
sumber
Gunakan jline3 :
Contoh:
sumber