停止绘制组件(允许用户通过对话框输入)的Java布尔值实际上并不会停止绘制

停止绘制组件(允许用户通过对话框输入)的Java布尔值实际上并不会停止绘制,java,Java,正如标题所示,我正在制作一个蛇游戏,当用户被认为已经死亡时,这是一个简单的布尔值,用户会收到一个YES/NO对话框。当显示此对话框时,我希望游戏停止/暂停绘制,以允许用户选择他们的选择 我遇到的问题是,当绘制对话框时,会反复调用repait,因此对话框会一次又一次地绘制,这最终会使应用程序崩溃,并使用户无法选择他们的选择。我试图用一个布尔值来控制它,但它没有解决问题 有很多代码,所以我会尽量只发布相关部分 protected void paintComponent(Graphics g) {

正如标题所示,我正在制作一个蛇游戏,当用户被认为已经死亡时,这是一个简单的布尔值,用户会收到一个YES/NO对话框。当显示此对话框时,我希望游戏停止/暂停绘制,以允许用户选择他们的选择

我遇到的问题是,当绘制对话框时,会反复调用repait,因此对话框会一次又一次地绘制,这最终会使应用程序崩溃,并使用户无法选择他们的选择。我试图用一个布尔值来控制它,但它没有解决问题

有很多代码,所以我会尽量只发布相关部分

protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        snake = Snake.snake;
        if (snake.over){
            snake.paint = false;
            System.out.println("Paint: " + snake.paint);
            int dialogResult = JOptionPane.showConfirmDialog (null, "Would you like to Submit your high score?","Game Over!",JOptionPane.YES_NO_OPTION);
            if(dialogResult == JOptionPane.YES_OPTION){
                System.out.println("Yes option");
            }else{
                System.out.println("Non-yes option!");

            }

        }

    }
现在正如您所看到的,当snake.over==true时,snake.paint==false应该停止调用重绘,但下面没有看到

public void actionPerformed(ActionEvent arg0) {
        if(paint){
            render.repaint();
        }
}
这是我的代码中唯一调用重绘的地方,所以这个布尔值实际上应该阻止这种情况发生,但事实并非如此

有一个计时器以20毫秒的延迟运行,这就是调用上述actionPerformed方法的原因

paintComponent方法中包含的打印语句在运行时打印以下内容:

Paint: false
Paint: false
Paint: false
Paint: false
Paint: false
Paint: false
Paint: false
Paint: false
and so forth...
有人知道我能实现我想要的吗

最终,我希望:

1) The user gets game over (dies).
2) The game then prompts the user if they want to upload their score using the above dialog (this means the game no longer needs to be repainted
3) The correct action then takes place based on the users decision from (2).
谢谢,
Chris。

解决方案是不在绘制方法中绘制对话框,而是在我的游戏循环中实现:

    public void actionPerformed(ActionEvent arg0) {
            render.repaint();
            if(over){
                int dialogResult = JOptionPane.showConfirmDialog (null, "Would you like to Submit your high score?","Game Over!",JOptionPane.YES_NO_OPTION);
                if(dialogResult == JOptionPane.YES_OPTION){
                    System.out.println("Yes option");
                }else{
                    System.out.println("Non-yes option!");

                }
            }
}

paintComponent方法应该严格用于绘制,而不是用于您尝试执行的任何操作。在主游戏循环中,您应该检查snake。完毕,如果设置为true,则会出现提示。但那是在绘画方法之后,我犯了一个错误,把对话放在绘画方法中,我的印象是对话是出于某种奇怪的原因绘制的。谢谢