Canon SDK を使用してカメラからイベントを取得しています。SDK では、特定のイベントが発生したときに呼び出されるコールバック関数を登録します。SDK と通信する Java ラッパーを作成しました。
しかし、イベントがトリガーされると、ウィンドウはイベントを直接取得しません。実際、Windowsでは、これがイベントを取得して自分にディスパッチする方法です:
private static final User32 lib = User32.INSTANCE;
boolean hasMessage = lib.PeekMessage( msg, null, 0, 0, 1 ); // peek and remove
if( hasMessage ){
lib.TranslateMessage( msg );
lib.DispatchMessage( msg ); //message gets dispatched and hence the callback function is called
}
基本的に、ウィンドウがイベントを受信したかどうかを確認してから続行します。Mac ではCocoa
、NSApplication を使用してそれを行うことができ、WindowServer
イベントがあれば送信します。
を使用して同様の代替手段を探していX11
ます。サンプルコード/リンクで十分です。
PS:これはこれに対するフォローアップの質問です。