【问题标题】:What does "AL lib: alc_cleanup: 1 device not closed" mean?“AL lib:alc_cleanup:1 个设备未关闭”是什么意思?
【发布时间】:2013-04-23 05:35:02
【问题描述】:

我正在尝试让自己参与到 Libgdx OpenGL 框架中。我使用LwjglApplication 创建了一些简单的应用程序来渲染盒子、一些网格和一些纹理。我遇到了 Aurelien Ribon 的创建刚性 Box2D 物体的应用程序。他使用LwjglCanvas 与Java 的Swing 集成。我尝试自己制作一个,我创建了一个JFrame,然后添加了LwjglCanvas。然后将JFrame的默认操作设置为接近EXIT_ON_CLOSE

但是,每次我关闭应用程序时,都会记录到我的控制台:

AL lib: alc_cleanup: 1 device not closed.

我不知道这意味着什么,它对我没有任何伤害。我只是想知道这意味着什么。根据LwjglCanvas docs:

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 队列还是应该将它绑定到JFrame.addWindowListener

“AL lib: alc_cleanup: 1 device not closed”到底是什么意思?

非常感谢!

【问题讨论】:

    标签: java swing libgdx


    【解决方案1】:

    AL.destroy(); 必须在应用程序关闭之前调用。此调用通常包含在 finally 块中,但如果应用程序调用 System.exit(0),则不再执行 finally 块。

    【讨论】:

    • 在我的例子中是 System.exit(0) 导致了这个错误。
    【解决方案2】:

    您应该尝试始终使用以下代码关闭您的应用:

    Gdx.app.exit();
    

    我通常把它放在我的 pause() 方法中,因为我的应用没有理由在后台运行。

    此静态方法告诉框架您的应用程序正在计划关闭,因此将有效地释放所有资源。您收到的错误是因为 JNI 接口已加载 OpenAL 库,但在该库正确卸载和释放之前系统已关闭。我遇到了和你一样的问题,但这解决了。如 JavaDoc 中所述,exit() 方法:

    安排[s] 退出应用程序。在 android 上,这将导致在未来某个时间调用 pause()dispose(),它不会立即完成您的应用程序。

    【讨论】:

      【解决方案3】:

      AL 库是 Libgdx(OpenAL 变体之一)使用的“音频库”。

      我相信这条消息只是意味着音频库正在为您清理一些(在您的情况下只是一个)音频流/句柄。如果您在退出时看到它,它是无害的,因为所有资源都将被操作系统清理。

      如果您在退出之前在内部清理了音频,则该消息应该会消失。

      更多详情,请在此处查找alc_cleanuphttp://repo.or.cz/w/openal-soft.git/blob/HEAD:/Alc/ALc.c

      【讨论】:

      • 我明白了。所以消息与 Java Swing 中的事件调度线程无关。关闭 LibgdxApplication 时为什么没有消息?
      • 可能alc_cleanup 不会在某些应用退出路径中被调用(例如,如果System.exit() 被调用,alc_cleanup 将不会被调用。
      • 感谢您的澄清和代码参考。它真的为我清除了一切。
      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多