【问题标题】:Implement a key listener in java console application在 Java 控制台应用程序中实现一个键监听器
【发布时间】:2013-09-30 17:47:29
【问题描述】:

我正在尝试在 java 中实现一个简单的程序(带有一个永久循环),当用户按下“a”键时该程序终止。我可以使用 system.in 来完成,但用户应该在按下“a”后按下 Enter 键.我希望程序在按下'a'后立即终止。有什么办法吗。我发现使用JNI是一种解决方案,但我不喜欢使用第三方库,因为这只是一个简单的代码。

【问题讨论】:

    标签: java console-application keylistener


    【解决方案1】:

    但我不喜欢使用第三方库,因为这只是一个简单的代码。

    那么就做不到了。

    标准 Java 控制台无法响应单个按键、句号等所有解决方案都需要第三方或 JNI/JNA 或非控制台 (gui) 解决方案。

    【讨论】:

    • 感谢 Hovercraft Full Of Eels,有没有我可以使用 JNI 库实现的代码?这将是一个很大的帮助。
    • @HeshithaHettihewa:我自己没有为此使用过 JNI。我已经使用了一个通过套接字与 Java 应用程序绑定的小型 AutoIt 应用程序来解决类似的问题,尽管此解决方案仅限于 Windows 机器。也有可用的第 3 方控制台可能允许此操作。
    • 好的,谢谢,我会研究一些可以提供帮助的第三方库。
    【解决方案2】:

    我在几年前处理过这个问题,甚至更多。我发现了一个在 Ubuntu 系统中对我有用的技巧。诀窍是调用

    stty -icanon min 1
    

    在执行应用程序之前;同样的技巧被用作库jline 的一部分,该库已用于windows 环境。

    【讨论】:

    • 谢谢FabioDch。有什么办法可以在windows环境下实现吗?
    • 不,抱歉......也许你可以尝试创建一个隐藏的 JFrame 或类似的东西,并监听一些 keyEvent ......但这只不过是一个 hack。正如 Hovercraft 所说的“标准的 Java 控制台无法响应单个按键”。
    • 好的,我现在明白了。我会尝试使用库。感谢您的回复。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2015-09-03
    • 2012-02-14
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多