2013-04-23 18 views
5

私はLibgdx OpenGLフレームワークに取り組もうとしています。私はLwjglApplicationを使って、ボックス、いくつかのメッシュ、いくつかのテクスチャをレンダリングする簡単なアプリケーションを作成しました。私は厳格なBox2Dボディを作成するAurelien Ribonのアプリを見つけました。彼はLwjglCanvasを使ってJavaのSwingと統合しました。自分で作ってみたところ、JFrameを作成してLwjglCanvasを追加しました。次にJFrameのデフォルト操作をEXIT_ON_CLOSEの近くに設定します。「AL lib:alc_cleanup:1デバイスが閉じていない」とはどういう意味ですか?

AL lib: alc_cleanup: 1 device not closed:私は、アプリケーションを閉じしかし毎回

が、これは私のコンソールにログインします。

私はそれが何を意味しているのか分かりません。それは私に何の害も及ぼしません。私はちょうどそれが何を意味するのか知りたい。 LwjglCanvasドキュメントによると:私はLwjglCanvas.stop()をバインドする必要があります

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.

、私はEventDispatchThreadキューに追加する必要がありますか、私はJFrame.addWindowListenerにバインドする必要がありますか?

「AL lib:alc_cleanup:1デバイスが閉じていない」とはどういう意味ですか?

ありがとうございます!

答えて

4

AL libは、Libgdx(OpenALバリアントの1つ)によって使用される「オーディオライブラリ」です。

このメッセージは、オーディオライブラリが(あなたの場合はただ1つの)オーディオストリーム/ハンドルをあなたのためにクリーンアップしていることを意味します。これを終了時に確認すると、無害なすべてのリソースがOSによってクリーンアップされます。

終了する前にオーディオを内部的にクリーンアップすると、メッセージは消えます。

詳細については、こちらでalc_cleanupを探します。 http://repo.or.cz/w/openal-soft.git/blob/HEAD:/Alc/ALc.c

+0

です。したがって、メッセージはJava Swingのイベントディスパッチスレッドとは関係ありません。 LibgdxApplicationを閉じるときにメッセージは表示されません。 – nagloan

+0

おそらく 'alc_cleanup'がいくつかのアプリケーション終了パスで呼び出されないかもしれません(例えば、' System.exit() 'が呼び出された場合、' alc_cleanup'は呼び出されません) –

+0

明確化とコード参照のおかげで本当に – nagloan

6

あなたは以下のコードの一部を使用してアプリを閉じて、常に試してみてください:

Gdx.app.exit(); 

が、私は通常私の一時停止中にそれを置きます( )メソッドは、私のアプリがバックグラウンドで実行される理由がなかったためです。

この静的メソッドは、アプリケーションが閉じることを計画しており、すべてのリソースを効果的に解放することをフレームワークに指示します。表示されているエラーは、JNIインターフェースがOpenALライブラリーをロードしたが、そのライブラリーが適切にアンロードされ解放される前にシステムがクローズされているためです。私はあなたと同じ問題を抱えていましたが、これで解決しました。 JavaDocに記載されているように、exit()メソッド:

アプリケーションからの終了をスケジュールします。アンドロイドで、pause()dispose()への呼び出しが発生すると、すぐにアプリケーションが終了しません。

+0

ありがとうございます!それはうまく動作します! –

8

AL.destroy();アプリケーションがシャットダウンする前に呼び出される必要があります。この呼び出しは、通常はfinallyブロックに含まれますが、アプリケーションがSystemを呼び出す場合はこの呼び出しが使用されます。exit(0)、finallyブロックはもう実行されません。

関連する問題