Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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_Macos_Swing_Java 7_Keylistener - Fatal编程技术网

Java 单次按键的多个按键事件(等于';=';键)

Java 单次按键的多个按键事件(等于';=';键),java,macos,swing,java-7,keylistener,Java,Macos,Swing,Java 7,Keylistener,当我键入Command equals时,我在使用Java7(更新67)的OSX中看到了这一点(⌘=). 以下是一个例子: public class Test implements KeyEventDispatcher { public Test() { JFrame frame = new JFrame(); frame.setSize(200, 200); frame.setVisible(true); } pu

当我键入Command equals时,我在使用Java7(更新67)的OSX中看到了这一点(⌘=). 以下是一个例子:

public class Test implements KeyEventDispatcher {

    public Test() {
        JFrame frame = new JFrame();
        frame.setSize(200, 200);
        frame.setVisible(true);
    }



    public static void main(String[] args) {
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new Test());
    }



    @Override
    public boolean dispatchKeyEvent(KeyEvent ke) {
        System.out.println(ke);
        return false;
    }
}
我看到的输出⌘=. 请注意,三个按键按下事件均为=,没有按键释放事件为=。还请注意,第二个表示keyChar为+以及完全没有按键类型的事件

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='+',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
多个事件会传播到侦听器、绑定或菜单加速器,这就是我最初发现问题的方式

为了进行比较,下面是⌘-. 没有多个事件,但仍然没有键类型的事件

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=45,keyText=-,keyChar='-',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
最后,这里是的输出⌘= 在Java 6中:

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=61,keyText==,keyChar='=',modifiers=⌘,extModifiers=⌘,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=157,keyText=⌘,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_RIGHT,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0

我还没有找到任何与此相关的错误报告。对此有什么解释吗?作为一种解决方法,我所能想到的就是忽略这些基于时间戳的多个事件。

Oracle网站上的相关错误报告是

这个错误的原因是MacOS本身,我只是在普通的非Java应用程序(Firefox和Terminal)中尝试按下⌘=, 我得到了缩放动作,应该由⌘+. 请注意,列表中的一个事件的keyChar为“+”而不是“=”


我想苹果这样做是因为更多的应用程序使用⌘+ 比⌘=, 他们不想强迫用户点击⌘⇧= 相反,他们做了一系列的事件,让应用程序来处理。但这完全是我的猜测。

感谢链接!现在看来,基于时间戳的解决方案是唯一的解决方案。