4

私はプログラムを書いていますが、プログラム内で、プログラムにフォーカスがないときにキーボードを見たいと思っています。「JNativeHook」と呼ばれる jar を使用しており、ここで見つけることができますhttp://code.google.com/p/jnativehook/

私の問題について: この jar は機能し、各キーのプレスとリリース イベントをキャプチャします。私のコードでは、これらを追跡し、「v」またはctrlキーが押された場合の各キープレスイベントで、ユーザーが貼り付けている両方がtrueの場合、それぞれにフラグを設定します。ユーザーが最初に貼り付けると、プログラムはカウンターを 1 にインクリメントします。カウンターが 1 の場合、次の貼り付けでシステム クリップボードのテキストを「Test Paste1」に設定し、カウンターをインクリメントします。 3カウンターして再スタート。(特定の組み合わせが押された場合にkeyListenerがアクティブになり、システムクリップボードを変更しようとするように制御を追加する予定です。もう一度押すとオフになります)

私の問題は、クリップボードが変更される場合があり、実際に正しいテキストを貼り付けても、貼り付けられない場合があり、エラーがスローされることです

Exception in thread "pool-1-thread-135" java.lang.IllegalStateException: cannot open system clipboard

そのため、キーボードを開くことができる場合とできない場合があります。私はメモ帳を使用してテストを行っています。だから私は自分のプログラムを実行し、メモ帳を開き、何かをコピーします。それから私は貼り付けます、それはそれを言います、そして次の貼り付けは正しい場合とそうでない場合があり、次の(2番目の貼り付け)、そして次の(3番目の貼り付け)。そして、それをやり遂げると、最初からやり直します。

時々クリップボードにアクセスできないのはなぜですか?テキストがクリップボードに確実に届くようにするにはどうすればよいですか?

行をwhileループに入れて、例外がない限り続行します。しかし、クリップボードがx時間「アクセスできない」場合、無限ループに陥る可能性があります。

続き:

http://stackoverflow.com/questions/14492472/cannot-gain-control-over-clipboard-even-with-controlling-logic
4

1 に答える 1

0

他のプログラムでクリップボードが開かれており、使用しているコードがこれを示すために例外をスローします。

そのため、最初はビジー状態で待つ必要があり、長時間待つとあきらめてしまいます。ただし、プログラムをクリップボードの所有者に設定し、所有権を失うたびに所有権を再取得することで、これを回避する方法があります (所有権を失うとクリップボードの所有者に通知されるため)。

考えられる解決策については、こちらのスレッドをお読みください: http://www.coderanch.com/t/377833/java/java/listen-clipboard

于 2013-01-23T22:36:06.640 に答える