Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #39422

Re: How can I read individual keystrokes?

From Martin Gregorie <martin@mydomain.invalid> (Martin Gregorie)
Newsgroups comp.lang.java.programmer
Subject Re: How can I read individual keystrokes?
Date 2020-04-05 11:22 +1200
Organization fsxNet Usenet Gateway | bbs.nz/#fsxNet
Message-ID <4164905457@f38.n261.z1.binkp.net> (permalink)
References <1714594589@f38.n261.z1.binkp.net>

Show all headers | View raw


On Sat, 04 Apr 2020 22:04:13 -0400, Arne VajhÄ,j wrote:

> On 4/4/2020 8:17 PM, Martin Gregorie wrote:
>> I have a need to read individual key presses as they are made. I'm
>> developing this stuff under Linux with OpenJava 1.8 and would prefer a
>> portable Java solution if that's possible.
>>
>> I have a working solution, but its ugly. A small C program captures the
>> one or more characters emitted as a key is pressed and sends them
>> individually to my Java application over a local network session.
>>
>> I've also tried using the Reader.read() method of the Reader instance
>> returned by calling Console.reader() but that uses line buffering
>> internally. As a result the Java code doesn't get sent anything until I
>> hit RETURN, when all the characters typed since the last RETURN are
>> sent,
>> followed by the LF, so is of no use here.
>>
>> Also, there's a good chance that the C program is using OS-specific
>> features to let it capture individual keystrokes.
>>
>> I have a feeling that I'm missing something obvious and so would
>> appreciate it if any of you can point me in the direction of a pure
>> Java way to capture individual key presses.
>
> For a Swing app then it is easy: KeyListener.
>
> For a console app it is a problem.
>
> Some of the common workarounds are:
> * use JNI and some OS specific C code * use an existing library that
> does the above (like jCurses)
> * use an OS specific command (stty on Linux) to put console
>    in single character mode and use System.in.read()
>
Thanks, guys: it looks as though I didn't miss anything.

I'm happy with using the C program as a keyboard listener knowing that there 
isn't a pure Java solution.

The application is, in fact, yet another Curses implementation(!). I looked at 
jCurses before I wrote it and decided to see how far I could get without diving 
into JNI and friends. So, first I wrote a from-the- manual JTermcap 
implementation and then buil
This was/is intended to be the basis of a 4GL written in Java and based heavily 
on the Sculptor 4GL. Why? Because writing applications with Sculptor is very 
fast and easy and it wouldn't adapt easily to using Swing. I think writing a 
set of Java file i/o 
Besides, years ago I wrote my own enhanced version of the Sculptor menu display 
program in C and using curses. That's  still in daily use on my Linux systems 
and on the OS-9 emulator I use to run Sculptor programs.


--
Martin    | martin at
Gregorie  | gregorie dot org

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

How can I read individual keystrokes? Martin Gregorie <martin@mydomain.invalid> (Martin Gregorie) - 2020-04-05 00:17 +1200
  Re: How can I read individual keystrokes? Eric Sosman <esosman@comcast-dot-net.invalid> (Eric Sosman) - 2020-04-04 20:38 +1200
  Re: How can I read individual keystrokes? Arne Vajhøj <arne@vajhoej.dk> (Arne Vajhøj) - 2020-04-04 22:04 +1200
    Re: How can I read individual keystrokes? Martin Gregorie <martin@mydomain.invalid> (Martin Gregorie) - 2020-04-05 11:22 +1200

csiph-web