我有以下代码:
display.addFilter(SWT.KeyUp, new Listener()
{
public void handleEvent(Event e)
{
System.out.println("Released " + e.character);
}
};
当我同时按下'a','s','d'和'f'键时,KeyDown事件按预期工作。但是,当我同时释放所有键时,我希望输出类似于:
发布了一个 发布了 发布了d 发布了f
但事实并非如此。打印出的内容通常只有一个字符,例如:
发布了d
为什么要跳过其他两三个事件?
答案 0 :(得分:2)
这是bug。
错误50020 - KeyReleased无法正常工作。
在下列情况下,KeyReleased似乎没有正确触发或根本没有触发: 连续按下几个键并按下。钥匙一个接一个 被释放。 keyReleased事件触发但event.character始终是 按下的最后一个键。如果释放了按下的最后一个键,则全部 其他键在释放时不会触发释放的事件。
该bug可能永远不会得到修复(bugtracker条目中的注释#1):
评论#1 这是一个很老的错误,我们可能无法修复。问题是 在Window中没有足够的信息来计算密钥 在WM_KEYUP中按下了。