12

したがって、私が抱えている問題は、Linux でのみ発生するバグのようです。キーが押されたときにスイングアプリを記録し、そのキーが離されたときに検出しようとしています。KeyListenerがこれを処理することになっているため、これは問題になりません。

問題は、キーを押したままにすると、1 つの keypressed() だけでなく、多くの keyPressed()/keyReleased() イベントが繰り返されることです。Linuxでキーが実際にいつリリースされるかを知るための解決策または回避策はありますか?

ありがとうございました。

4

5 に答える 5

14

したがって、私が抱えている問題は、Linux でのみ発生するバグのようです

はい、これは Linux の問題です。

Windows では、キーを押したままにすると、複数の KeyPressed イベントが発生しますが、KeyReleased イベントは 1 つしか発生しません。

この質問はよく聞かれますが、良い解決策を見たことがありません。

しかし、解決策の基本はタイマーを使用することだと思います。キーを押すと、タイマーが開始されます。別のキーを押すと、タイマーが再起動します。そのため、タイマーの間隔がキーボードのリピート レートよりも大きい限り、キーを押したままにすると、タイマーは継続的にリセットされます。keyPresses の生成が停止すると、タイマーが起動するため、キーが離されたと見なされます。これは、keyReleased の処理に遅延が生じることを意味します。

于 2009-11-15T07:29:46.100 に答える
2

この質問はここに複製されています。

これは、アプリケーションの開始時にインストールできる AWTEventListener として実装されたハックです。

于 2010-05-06T11:53:33.933 に答える
1

ここでかなり良い回避策を見つけることができます。

于 2011-11-17T17:32:14.023 に答える
0

Sun からのバグ (サンプルの回避策を含む) は次のとおりです: http://bugs.sun.com/view_bug.do?bug_id=4153069

于 2009-12-28T15:44:39.747 に答える