我有一个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