Java 在jframe中打印并立即退出

Java 在jframe中打印并立即退出,java,Java,我用java设计了一个小游戏。现在,游戏的结束点条件是发生碰撞时(解释整个事情可能需要很长时间)。我希望在游戏屏幕上打印“游戏结束”,即jframe和分数。我需要立即退出代码。为了在退出之前显示分数和“游戏结束”,我让线程休眠了6秒钟。在输出中,线程确实休眠了6秒,但是我的游戏结束了,并且没有打印分数声明。当我删除thread.sleep和System.exit(0)时,会显示这些语句,但我不明白如何退出代码。请帮助。以下是我尝试的内容: if(collision_occurs)

我用java设计了一个小游戏。现在,游戏的结束点条件是发生碰撞时(解释整个事情可能需要很长时间)。我希望在游戏屏幕上打印“游戏结束”,即jframe和分数。我需要立即退出代码。为了在退出之前显示分数和“游戏结束”,我让线程休眠了6秒钟。在输出中,线程确实休眠了6秒,但是我的游戏结束了,并且没有打印分数声明。当我删除thread.sleep和System.exit(0)时,会显示这些语句,但我不明白如何退出代码。请帮助。以下是我尝试的内容:

    if(collision_occurs)
    {   
        endTime = System.nanoTime();
        g2.setFont(new Font("serif",Font.BOLD+Font.ITALIC,50));
        time_taken=(endTime-startTime)/1000000000;
        String tym=String.valueOf(time_taken);
        g2.drawString("GAME OVER", 100, 50);
        g2.drawString("SCORE= ",100, 100);
        g2.drawString(tym, 300, 100);
        try {
            Thread.sleep(6000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
          System.exit(0);
    }

您应该永远不要从EDT调用Thread.sleep()

相反,设置一个在一定时间后退出的计时器。建议阅读:


编辑:这里有更多关于EDT的信息:

即使在那时也没有观察到任何变化……它变得非常挑剔,请帮助这可能是一个评论,你不这么认为吗?这是正确的方法;创建一个计时器对象,向其传递一个可运行的终止程序。作为旁注,OP似乎是从内部调用
Thread.sleep()
,而不是从EDT调用。不过,从paintComponent()调用Thread.sleep()肯定会冻结GUI,导致OP中描述的问题。@Frakcool这是OP所问问题的正确答案,所以不,我认为这不应该是一个评论。请注意,您留下的注释仍然会在EDT上调用Thread.sleep(),这是一件非常糟糕的事情。@jedyobidan paintComponent()方法确实是从EDT调用的。这就是它冻结你的gui的原因…@user3694166这是谷歌搜索“JavaEDT”的第一个结果: