使用while语句时不会出现JFrame

时间:2016-11-12 12:28:12

标签: java swing jframe

我希望游戏继续循环,直到GameOver为假。

我曾经用if做过但游戏并没有真正循环,所以我使用了while语句。但是在我尝试编译之后,JFrame根本就不会出现!事实上没有出现。

关于如何解决此问题的任何可能的解决方案?

public void game() {
    while (GameOver != true) {
        ATT1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (b.Death == false) {
                    a.Att1(b, Fireball);
                } else {
                    a.Att1(c, Fireball);
                }
            }
        });
        ATT2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (b.Death == false) {
                    a.Att2(b, Fireball);
                } else {
                    a.Att2(c, Fireball);
                }
            }
        });
    }
}

1 个答案:

答案 0 :(得分:2)

最有可能的是,如果你检查一下系统统计信息,CPU使用率图表会直接飞向天空吗?

这是因为您正在启动一个长时间运行的循环,其中没有耗时的操作,导致在短时间内执行多次(因此CPU负载)。我打赌你从另一个动作监听器中调用game()对吗? (也许在按下“开始游戏”按钮后)

我认为由于缺乏基于Swing的应用程序如何工作的知识,您的GUI代码方法是错误的。由于引入了并发性,它与结构编程有很大的不同和复杂性。您正在阻止EDT(假设GUI线程)导致帧未正确绘制。

首先阅读Oracle指南,了解如何构建可在此处找到的Swing应用程序:https://docs.oracle.com/javase/tutorial/uiswing/