您好,登錄后才能下訂單哦!
最近原來的游戲趨于穩定,一些小問題慢慢被玩家提及越來越多。圖片顯示異常的問題很早就有,但是極少出現,最近抽空重點檢查了一下。總算搞定了,特別記錄一下。
通過一直以來玩家反饋的數據,我找了一下規律,錯誤都是彈出框,并且大部分都是游戲的消息框。還有一個共性就是所有的錯誤都是在異步線程中引發的。比較奇怪的是在lwjgl中是直接報錯,但是在android中是圖片顯示異常。最后總算捕獲到該異常:
com.badlogic.gdx.utils.GdxRuntimeException: java.lang.RuntimeException: No OpenGL context found in the current thread. at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:471) at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:316) at com.dreamoe.pirateage.client.ApkAssets.loading(ApkAssets.java:82) at com.dreamoe.pirateage.client.ApkAssets.get(ApkAssets.java:54) at com.dreamoe.pirateage.client.Assets.get(Assets.java:229) at com.dreamoe.pirateage.client.actor.impl.window.TipWindow.<init>(TipWindow.java:30) at com.dreamoe.pirateage.client.actor.impl.window.TipWindow.show(TipWindow.java:48) at com.dreamoe.pirateage.client.aop.RemoteAspect.invoke(RemoteAspect.java:86) at $Proxy0.registerUser(Unknown Source) at com.dreamoe.pirateage.client.manager.remote.Remote.registerUser(Remote.java:1248) at com.dreamoe.pirateage.client.actor.impl.window.RegisterWindow$1$1.doInRegisterWindow.java:187) at com.dreamoe.pirateage.client.thread.AsyncWaitThread.run(AsyncWaitThread.java:29) Caused by: java.lang.RuntimeException: No OpenGL context found in the current thread. at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124) at org.lwjgl.opengl.GL11.glGenTextures(GL11.java:1468) at com.badlogic.gdx.backends.lwjgl.LwjglGL10.glGenTextures(LwjglGL10.java:240) at com.badlogic.gdx.graphics.Texture.createGLHandle(Texture.java:166) at com.badlogic.gdx.graphics.Texture.create(Texture.java:158) at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:154) at com.badlogic.gdx.assets.loaders.TextureLoader.loadSync(TextureLoader.java:84) at com.badlogic.gdx.assets.loaders.TextureLoader.loadSync(TextureLoader.java:1) at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:130) at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:94) at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:399) at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:314) ... 10 more
通過不斷模擬假設并驗證,最后發現我寫了一個異步線程去做服務器交互,主界面鎖定等待。當在這個異步線程中做了assetManager.loading的動作去加載新的圖片,這其實就不是在主線程做的,因而導致圖片加載異常。由于程序中圖片有緩存,所以才導致只有加載一次圖片資源就不會出錯。結果這個緩存搞的現象變得更難識別。
其實本身還是一個很簡單的問題,還是找到重現不走,再分析清楚。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。