“AL lib:alc_cleanup:1设备未关闭”是什么意思?

时间:2013-04-23 05:35:02

标签: java swing libgdx

我正在努力参与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设备未关闭”是什么意思?

非常感谢!

3 个答案:

答案 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_cleanuphttp://repo.or.cz/w/openal-soft.git/blob/HEAD:/Alc/ALc.c