Java Libgdx异常\访问\冲突(0xc0000005)

Java Libgdx异常\访问\冲突(0xc0000005),java,libgdx,jvm,Java,Libgdx,Jvm,我目前正试图通过阅读一本名为“学习libGdx游戏开发”的书中的教程来学习libGdx,并发现了一个奇怪的bug 有一个名为backToMenu的函数: private void backToMenu () { // switch to menu screen game.setScreen(new MenuScreen(game)); } 其目的是简单地将游戏屏幕更改为主菜单屏幕。游戏在菜单屏幕上开始,该菜单屏幕转换为游戏屏幕,由用户单击启动。一旦用户进入游戏屏幕,他/她有两种

我目前正试图通过阅读一本名为“学习libGdx游戏开发”的书中的教程来学习libGdx,并发现了一个奇怪的bug

有一个名为backToMenu的函数:

private void backToMenu () {
    // switch to menu screen
    game.setScreen(new MenuScreen(game));
}
其目的是简单地将游戏屏幕更改为主菜单屏幕。游戏在菜单屏幕上开始,该菜单屏幕转换为游戏屏幕,由用户单击启动。一旦用户进入游戏屏幕,他/她有两种方法返回主菜单,一种是点击退出按钮,另一种是当游戏结束时。首先,按下退出按钮,我只需收听事件:

public boolean keyUp (int keycode) {
    // Back to Menu
    if (keycode == Input.Keys.ESCAPE)
        backToMenu();

    return false;
}
keyUp是一个重写的InputAdapter函数。这个很好用。问题出现在第二个选项上:

public void update (float deltaTime)
{
    handleDebugInput(deltaTime);
    if (isGameOver()) {
        timeLeftGameOverDelay -= deltaTime;
        if (timeLeftGameOverDelay < 0)
        {
            //init();
            backToMenu();
        }
    }
奇怪的是,如果我试图模拟用户按escape按钮而不是直接调用backToMenu,它会突然起作用!用户可以在MainScreen->GameScreen->GameOver->MainScreen->GameScreen之间来回切换

public void update (float deltaTime)
{
    handleDebugInput(deltaTime);
    if (isGameOver()) {
        timeLeftGameOverDelay -= deltaTime;
        if (timeLeftGameOverDelay < 0)
        {
            //init();
            try {
                Robot robot = new Robot();
                // Simulate a key press
                robot.keyPress(KeyEvent.VK_ESCAPE);
                robot.keyRelease(KeyEvent.VK_ESCAPE);

            } catch (AWTException e) {
                e.printStackTrace();
            }

        }
    }
public void更新(float deltaTime)
{
handleDebugInput(deltaTime);
if(isGameOver()){
timeLeftGameOverDelay-=延迟时间;
如果(timeLeftGameOverDelay<0)
{
//init();
试一试{
机器人=新机器人();
//模拟按键
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.keyrease(KeyEvent.VK_-ESCAPE);
}捕获(awtexe){
e、 printStackTrace();
}
}
}

也有同样的问题,我不知道确切的问题是什么,所以解决方法是生成ESCAPE key的key事件 但是你可以通过更换机器人来更有效地完成这项工作

try {
            Robot robot = new Robot();
            // Simulate a key press
            robot.keyPress(KeyEvent.VK_ESCAPE);
            robot.keyRelease(KeyEvent.VK_ESCAPE);

        } catch (AWTException e) {
            e.printStackTrace();
        }

对于
keyUp(Keys.ESCAPE);

也有同样的问题,我不知道确切的问题是什么,所以解决方法是生成ESCAPE key的key事件 但是你可以通过更换机器人来更有效地完成这项工作

try {
            Robot robot = new Robot();
            // Simulate a key press
            robot.keyPress(KeyEvent.VK_ESCAPE);
            robot.keyRelease(KeyEvent.VK_ESCAPE);

        } catch (AWTException e) {
            e.printStackTrace();
        }
使用
keyUp(Keys.ESCAPE);