3

ボタンが押された後に (LWJGL ライブラリを使用して) OpenGL ウィンドウを開く SWT アプリがあります。メインの SWT ウィンドウを閉じて、OpenGL コンテキストで新しいウィンドウを開くことになっています。Windowsで正常に動作します。Mac では、次のエラーが表示されます。

2010-03-05 02:28:25.315 java[1315:a07] [Java CocoaComponent compatibility mode]: Enabled
2010-03-05 02:28:25.316 java[1315:a07] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
2010-03-05 02:28:25.317 java[1315:a07] Apple AWT Startup Exception : _createMenuRef called with existing principal MenuRef already associated with menu
2010-03-05 02:28:25.318 java[1315:a07] Apple AWT Restarting Native Event Thread

SWT ウィンドウが閉じてから、ウィンドウが開いていない状態でアプリがハングします。

SWT アプリが正常にシャットダウンされず、それに関連付けられたメニュー エントリが残っているようです。これにより、LWJGL ウィンドウが開かなくなります。Mac OS X が必要とするアプリケーション メニューは 1 つだけです。SWT は独自のメニューを解放せず、LWJGL は別のメニューを追加したいと考えています。

事実:

  • SWT ダイアログのボタンは、ダイアログを閉じて LWJGL ウィンドウ (org.lwjgl.opengl.Display) を開くことになっています。

  • このボタンは、SWT ウィンドウが閉じられた後に次に何をすべきかをアプリに通知する静的変数を設定するため、LWJGL ウィンドウは SWT コールバックから直接開かれることはありません。

  • 次に、ボタンは SWT ウィンドウを閉じます。これを行う正しい方法はわかりませんが、shell.close、shell.dispose、display.close、display.dispose のさまざまな組み合わせを試しましたが、どれも機能しませんでした。それらはすべてウィンドウを閉じますが、毎回エラーが発生します。

これを機能させるために何ができるか知っている人はいますか?

更新:これは単に機能せず、Appleはこれを修正しないようです。これを回避する唯一の方法は、新しいアプリ インスタンスを起動し、2 番目のウィンドウを開くように指示するパラメーターを渡すことです。

更新 2:この特定のケースでは、Windows バージョンのアプリには SWT ダイアログを使用して問題を解決し、Mac バージョンでは、JVM を呼び出して必要に応じて LWJGL アプリを実行するネイティブの Cocoa ダイアログを作成しました。それはかなりうまくいきます。

4

1 に答える 1