Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中检查启动时是否按下了键_Java_Swing_Keyboard_Key_Awt - Fatal编程技术网

如何在Java中检查启动时是否按下了键

如何在Java中检查启动时是否按下了键,java,swing,keyboard,key,awt,Java,Swing,Keyboard,Key,Awt,我试图编写一个分辨率选择对话框,当程序第一次启动时弹出。为了避免让用户感到厌烦,我想实现一个相当标准的特性,即您可以通过复选框关闭该对话框,但在启动时按住alt键可以恢复该对话框 不幸的是,没有明显的方法询问java当前是否按下了给定的键。你只能通过键盘监听器注册新的按键,但如果按键在应用程序启动之前启动,那就没有帮助了。我对Java不太了解(主要是C语言的代码),但是如果用C语言编写一个小的加载程序,或者用一些参数启动Java应用程序,怎么样(比如某个键是否已按下)?有两种类型的按键检测:基于

我试图编写一个分辨率选择对话框,当程序第一次启动时弹出。为了避免让用户感到厌烦,我想实现一个相当标准的特性,即您可以通过复选框关闭该对话框,但在启动时按住alt键可以恢复该对话框


不幸的是,没有明显的方法询问java当前是否按下了给定的键。你只能通过键盘监听器注册新的按键,但如果按键在应用程序启动之前启动,那就没有帮助了。

我对Java不太了解(主要是C语言的代码),但是如果用C语言编写一个小的加载程序,或者用一些参数启动Java应用程序,怎么样(比如某个键是否已按下)?

有两种类型的按键检测:基于事件的和轮询。如果在启动时轮询键盘上的
键(通过带有
睡眠的循环)。线程(timeInMs)
不断检查键是否已按下),然后您可以检测它是否在启动时已按下。

因此,您似乎可以这样做,但仅适用于caps lock等。因此,我已将caps lock用于此目的。这并不完美,但还行。

原始问题似乎没有得到回答。建议的方法确定锁定键状态,如CapsLock、ScrollLock等o在按住Alt键的状态下不起作用

public class LockingKeyDemo {
    static Toolkit kit = Toolkit.getDefaultToolkit();

    public static void main(String[] args) {
        System.out.println("caps lock2 = "
                + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
}
考虑以下代码:

com.sun.jna.platform.KeyboardUtils.isPressed(java.awt.event.KeyEvent.VK_ALT);

唯一的问题是,该类是Sun的JDK内部类,不可能在任何其他JVM中可用。取决于您的项目,它可能是可接受的,也可能是不可接受的

它在内部调用Windows上的User32.DLL:


User32.INSTANCE.GetAsyncKeyState(…)

这是一个困难的解决方案,因为程序想要在Mac/Windows/Linux上运行,而我对C的了解还不够。@Zarkonnen它是否与安装程序捆绑了JVM?如果答案是肯定的,那么
KeyboadUtils.isPressed
可以在Windows、Mac和Linux上运行。我应该从哪里导入工具包类?这个解决方案解决了吗这篇博文中描述的问题?它有点描述这种方法不可靠,但它是旧的。。。。
public class LockingKeyDemo {
    static Toolkit kit = Toolkit.getDefaultToolkit();

    public static void main(String[] args) {
        System.out.println("caps lock2 = "
                + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
}