1

私は次のコードを持っています:

display.addFilter(SWT.KeyUp, new Listener()
{
    public void handleEvent(Event e)
    {
        System.out.println("Released " + e.character);
    }
};

キー「a」、「s」、「d」、および「f」を同時に押すと、KeyDownイベントは期待どおりに機能します。ただし、すべてのキーを同時に離すと、出力は次のようになります。

リリース済みsリリース済みdリリース済みf

しかし、そうではありません。印刷されるのは通常、次のような1文字だけです。

リリースd

他の2つまたは3つのイベントをスキップするのはなぜですか?

4

1 に答える 1

2

これはバグです。

バグ50020-KeyReleasedが正しく機能しない
次の場合、KeyReleasedが正しく起動していないか、まったく起動していないようです。複数のキーを連続して押したままにします。キーが1つずつ解放されます。keyReleasedイベントは発生しますが、event.characterは常に最後に押されたキーです。最後に押されたキーが離された場合、他のすべてのキーは、離されたときに解放イベントを発生させません。

バグはおそらく修正されないでしょう(バグトラッカーエントリのコメント#1):

コメント#1
これは非常に古いバグであり、おそらく修正されません。問題は、WM_KEYUPで押されたキーを計算するのに十分な情報がウィンドウにないことです。

于 2013-02-20T07:43:51.017 に答える