gpt4 book ai didi

java - 从 Mac 上的 SWT 应用程序打开 LWJGL 窗口

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:41 26 4
gpt4 key购买 nike

我有一个 SWT 应用程序,它在按下按钮后打开一个 OpenGL 窗口(使用 LWJGL 库)。它应该关闭它的主 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 只需要一个应用程序菜单。 SWT 没有释放它自己的菜单,LWJGL 希望添加另一个菜单。

事实:

  • SWT 对话框中的按钮应该关闭对话框并打开 LWJGL 窗口 (org.lwjgl.opengl.Display)。

  • 该按钮在应用程序中设置了一个静态变量,以告诉它在 SWT 窗口关闭后下一步要做什么,因此 LWJGL 窗口不会直接从 SWT 回调中打开。

  • 然后该按钮关闭 SWT 窗口。我不知道这样做的正确方法,但尝试了 shell.close、shell.dispose、display.close 和 display.dispose 的各种组合,但都没有用。他们都关闭了窗口,但每次都出现错误。

有谁知道可以做些什么来使这项工作成功?

更新:这根本行不通,而且 Apple 似乎永远不会修复它。解决它的唯一方法是启动一个新的应用程序实例并向其传递一个参数,告诉它打开第二个窗口。

更新 2: 在这种特殊情况下,我通过为应用程序的 Windows 版本和 Mac 版本使用 SWT 对话框解决了这个问题,我编写了一个调用 JVM 的 native Cocoa 对话框并在需要时运行 LWJGL 应用程序。效果很好。

最佳答案

在我看来,问题不在于 SWT 创建新窗口或 LWJGL 实际上这样做。我认为问题出在Mac下,应用程序菜单必须注册到进程中,不知为何,两者之间存在利益冲突。

你可能会更好地处理一些事情:

  • 如果先创建 LWJGL 窗口,然后创建 SWT 外壳,会发生什么情况?
  • 如果在创建 SWT shell 之前静态初始化 LWJGL,然后继续创建 shell 并创建 LWJGL 窗口,会发生什么情况?

顺便说一下,要关闭 SWT 窗口,您需要做的就是处理 Shell:

shell.dispose();

关于java - 从 Mac 上的 SWT 应用程序打开 LWJGL 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com