我有一個SWT應用程序,它在按下按鈕後打開一個OpenGL窗口(使用LWJGL庫)。它應該關閉它的主要SWT窗口並用OpenGL上下文打開一個新窗口。在Windows上正常工作。在Mac上,我得到這個錯誤:從Mac上的SWT應用程序打開LWJGL窗口
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只需要一個應用程序菜單。 SWT不釋放它自己的菜單,LWJGL想要添加另一個菜單。
事實:
在SWT對話框A按鈕應該關閉對話框,並打開一個窗口LWJGL(org.lwjgl.opengl.Display)。
該按鈕在應用程序中設置一個靜態變量,告訴它在SWT窗口關閉後要做什麼,所以LWJGL窗口不會直接從SWT回調中打開。
該按鈕然後關閉SWT窗口。我不知道這樣做的正確方法,但嘗試了各種組合的shell.close,shell.dispose,display.close和display.dispose,他們都沒有工作。他們都關閉窗口,但每次都發生錯誤。
有誰知道可以做些什麼來完成這項工作?
UPDATE:這根本行不通,似乎蘋果不會修復它,永遠。唯一的解決方法是啓動一個新的應用程序實例並傳遞一個參數,告訴它打開第二個窗口。
更新2:在這種特殊情況下,我使用SWT對話框Windows版本的應用程序和Mac版本解決了這個問題,我寫了一個天然可可對話框,調用JVM和運行LWJGL應用程序需要時。這工作得很好。
你是對有關利益衝突。但是,我無法在實際嘗試打開LWJGL顯示窗口之前靜態初始化LWJGL。 Sys中有一個靜態構造函數,但它沒有做任何實質性的工作。 – 2010-03-13 11:40:33
當你啓動一個LWJGL窗口然後一個SWT窗口時會發生什麼? – 2010-03-13 16:19:39
我很好奇它是如何爲你制定的! – 2010-03-15 11:49:54