In Java, what is the best way to capture a keystroke?

前端 未结 3 1115
生来不讨喜
生来不讨喜 2020-12-21 05:13

I\'m having trouble capturing the keystroke in my Java command-line application. Using System.in.read() I don\'t seem to get anything when hitting the tab key. W

相关标签:
3条回答
  • 2020-12-21 05:48

    Have a look at JLine. I have not used it myself. It uses a windows DLL (using JNI) and it has linux support to switch the console to character/raw mode instead of buffered mode. I have never used this before so use at your own risk. I am also not 100% sure if it will address your issue, but its worth a shot :)

    EDIT: I can confirm it does work

    ConsoleReader cr = new ConsoleReader();
    while (cr.readVirtualKey() != 0x09){
      //loop till Tab is pressed
    }
    

    EDIT AGAIN: The library does contain autocomplete (by pressing tab) for the command line... Enjoy :)

    0 讨论(0)
  • 2020-12-21 05:57

    Data from an InputStream is only made available when the user has pressed enter. I think you'll find that if you press enter after tab, the tab will show up.

    In c applications, there is something similar: a shell sets the input mode to raw from cooked, since it needs the raw keystrokes. Readline is the normal library used for this in Linux. I'm not sure what's common on Windows. As far as I can think, something using JNI is the only option here.

    0 讨论(0)
  • 2020-12-21 05:58

    I would guess that your shell is capturing tab and preventing it from getting to your application. There may not be anything you can do about this...

    0 讨论(0)
提交回复
热议问题