java - removeProcessor 出现奇怪的错误?

标签 java libgdx

我使用 KeyUp 事件来删除舞台对象的事件。我做了什么:

@Override
public boolean keyUp(int keycode) {
    if (keycode == consoleKeyToggle) {
        show = !show;
        if (show)
            framework.AddInputListener(stage);
        else
            framework.RemoveInputListener(stage);
    }
    return false;
}

在框架对象中我有两个函数:

@Override
public void AddInputListener(InputProcessor input) {
    multiplexer.addProcessor(input);
}

@Override
public void RemoveInputListener(InputProcessor input) {
    multiplexer.removeProcessor(input);
}

AddInputListener 没问题,但是当调用RemoveInputListener 时,我收到此错误:

Exception in thread "LWJGL Application" java.lang.IndexOutOfBoundsException: index can't be >= size: 2 >= 2
    at com.badlogic.gdx.utils.Array.get(Array.java:127)
    at com.badlogic.gdx.InputMultiplexer.keyUp(InputMultiplexer.java:76)
    at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:288)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:199)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)

有什么建议吗?

谢谢

最佳答案

这些函数正在由输入多路复用器调用,并且您正在这些函数(事件回调)内修改它。
通常情况下应该避免这种情况。

但如果你找不到更好的替代逻辑,你可以尝试替换

framework.AddInputListener(stage);

Gdx.app.postRunnable(new Runnable() {
    @Override
    public void run() {
        framework.AddInputListener(stage);
    }
});

希望这有帮助。

关于java - removeProcessor 出现奇怪的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774828/

相关文章:

Java:for-each 循环中的 "Anonymous"数组

java - BIRT 报告中的 BIRT 框格式

java - Spring Boot quartz : jdbc tables are always initailized

java - Blender 模型在 libGDX 中渲染不正确

java - Java 中的可重入锁

java - LibGDX 将 Vector2 与浮点值相乘

android - Google Play 服务非多人邀请挑战消息

java - 你如何计算具有初始高度的弹丸的位移?

libgdx - 为什么我在设置 LibGDX 时没有通用补间引擎

java - JAAD 阻止其他供应商工作