我正在努力参与Libgdx OpenGL框架。我使用LwjglApplication
来创建一些简单的应用程序来渲染框,一些网格和一些纹理。我遇到了Aurelien Ribon的应用程序,它创建了刚性的Box2D机身。他使用LwjglCanvas
与Java的Swing集成。我自己尝试制作一个,我创建了一个JFrame
然后添加了LwjglCanvas
。然后将JFrame
的默认操作设置为接近EXIT_ON_CLOSE
。
但每次关闭应用程序时,都会记录到我的控制台:
AL lib: alc_cleanup: 1 device not closed
。
我不知道这意味着什么,这对我没有任何伤害。我只是想知道这意味着什么。根据{{1}}文档:
LwjglCanvas
我应该在哪里绑定All OpenGL calls are done on the EDT. This is slightly less efficient then a dedicated thread, but greatly simplifies synchronization. Note that you may need to call stop() or a Swing application may deadlock on System.exit due to how LWJGL and/or Swing deal with shutdown hooks.
,我应该将其添加到LwjglCanvas.stop()
队列还是应该将其绑定到EventDispatchThread
?
“AL lib:alc_cleanup:1设备未关闭”是什么意思?
非常感谢!
答案 0 :(得分:10)
AL.destroy();
。此调用通常包含在finally块中,但如果应用程序调用{{1}},则最终不再执行块。
答案 1 :(得分:7)
您应该尝试使用下面的代码关闭您的应用:
Gdx.app.exit();
我通常将其放在 pause()方法中,因为我的应用没有理由在后台运行。
此静态方法告诉框架您的应用程序正在计划关闭,因此将有效地释放所有资源。您获得的错误是因为JNI接口已加载OpenAL库,但在正确卸载和释放该库之前系统已关闭。我遇到了和你一样的问题,但这解决了它。如JavaDoc中所述,exit()方法:
安排[s]退出申请。在Android上,这将导致将来某个时间调用 pause()和 dispose(),它不会立即完成您的应用程序。
答案 2 :(得分:5)
AL lib是Libgdx(OpenAL变体之一)使用的“音频库”。
我相信这条消息只是意味着音频库正在为您清理一些(在您的情况下只有一个)音频流/句柄。如果您在退出时看到此信息,则无害,因为操作系统将清除所有资源。
如果您在退出之前在内部清理音频,则该消息应该消失。
有关详细信息,请在此处查找alc_cleanup
:
http://repo.or.cz/w/openal-soft.git/blob/HEAD:/Alc/ALc.c