Java LibGdx Android游戏在使用奇数键码的简历中崩溃(1026)

Java LibGdx Android游戏在使用奇数键码的简历中崩溃(1026),java,android,libgdx,Java,Android,Libgdx,在android上运行时,我们的LibGdx项目在恢复时崩溃 下面的跟踪显示了出了什么问题。但却不知道该怎么解决这个问题 01-11 18:37:43.643 17046-17046/com.mojo.rainbowrun.android D/AndroidRuntime﹕ Shutting down VM 01-11 18:37:43.643 17046-17046/com.mojo.rainbowrun.android W/dalvikvm﹕ threadid=1: thread exi

在android上运行时,我们的LibGdx项目在恢复时崩溃

下面的跟踪显示了出了什么问题。但却不知道该怎么解决这个问题

01-11 18:37:43.643  17046-17046/com.mojo.rainbowrun.android D/AndroidRuntime﹕ Shutting down VM
01-11 18:37:43.643  17046-17046/com.mojo.rainbowrun.android W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41675d88)
01-11 18:37:43.643  17046-17046/com.mojo.rainbowrun.android E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.mojo.rainbowrun.android, PID: 17046
    java.lang.ArrayIndexOutOfBoundsException: length=256; index=1026
            at com.badlogic.gdx.backends.android.AndroidInput.onKey(AndroidInput.java:561)
            at android.view.View.dispatchKeyEvent(View.java:7791)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2042)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1512)
            at android.app.Activity.dispatchKeyEvent(Activity.java:2418)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1969)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3852)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3558)
            at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3718)
            at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2087)
            at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1781)
            at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1772)
            at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2064)
            at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:138)
            at android.os.Looper.loop(Looper.java:196)
            at android.app.ActivityThread.main(ActivityThread.java:5137)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:718)
            at dalvik.system.NativeStart.main(Native Method)
以下是
AndroidInput.java
第561行的代码片段:

            if (keyCode == Keys.BUTTON_CIRCLE) {
                if (keys[Keys.BUTTON_CIRCLE]) {
                    keyCount--;
                    keys[Keys.BUTTON_CIRCLE] = false;
                }
            } else {
                if (keys[e.getKeyCode()]) { // Line 561
                    keyCount--;
                    keys[e.getKeyCode()] = false;
            }

keys
数组有256个条目,因此Libgdx不希望keycode有1026个大。

在第561行中,if语句有一个数组,当if语句codition执行时,您将得到keycode作为索引变量,这可能导致数组超出Logcat所说的范围。如果这是导致问题的原因,请尝试更改它并查看它是否解决了问题


第561行中的if语句else语句一起执行。如果第一个Iffalse。验证您是否可以更改该行中的代码,并查看这是否是导致崩溃的真正原因,我不知道e对象的含义,因为您没有在代码中发布他的工作。

您可以在第561行的周围为您使用的版本添加Libgdx的AndroidInput.java的代码片段吗?(github上最新的一个有相当不同的行号。)知道在恢复过程中按下了什么键吗?这种情况经常发生吗?或者只是偶尔?(很可能您正在重用一些需要重新初始化的资源,但很难说在这种情况下具体是什么。)将代码片段添加到我的第一篇文章的底部。不知道按下了什么键,只是继续应用程序。它不会一直发生,有时会在离开应用程序5分钟后发生。有时会在我离开应用程序5秒后恢复应用程序时发生。看到一个大于250的密钥码(密钥数组被分配为
private boolean[]keys=new boolean[256];
)真的很奇怪。1026是0x402,所以我想知道这是否是某个标志值在不应该泄漏的地方泄漏。这是什么装置?它运行的是哪个操作系统版本,您使用的是哪个Libgdx版本?Android 4.4.4 Sony Xperia Z3 Compact和Libgdx 1.5.2旧问题,您会得到答案。