2016-11-12 4 views
0

Я хотел, чтобы игра продолжалась, пока GameOver не является ложным.JFrame не отображается при использовании while statement

Раньше я делал это с помощью 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); 
       } 
      } 
     }); 
    } 
} 
+0

Почему вы добавляете столько actionlisteners? Разве это не один из них? – tkausl

+0

Убедитесь, что ваша петля не работает в качающейся нити. Здесь вы видите только фрагмент кода, так что невозможно узнать, что не так –

+1

Пожалуйста, отредактируйте свой вопрос (https://stackoverflow.com/posts/40562837/edit) и добавьте [MCVE] или [Short, Self Contained, Correctable (Compilable), Example] (http://sscce.org/). Добавленный фрагмент не показывает достаточно, чтобы мы могли вам помочь. GL! –

ответ

2

И, скорее всего, если вы проверите системную статистику, то таблица использования ЦП будет ракета в небо вправо?

Это потому, что вы запускаете длинный цикл работы без каких-либо трудоемких действий в нем, что приводит к множеству исполнений за короткое время (при этом загрузка процессора). Держу пари, что вы вызываете game() из другого прослушивателя действий? (возможно, после нажатия кнопки «Начать игру»)

Я думаю, что ваш подход к графическому интерфейсу неверен из-за отсутствия знаний о том, как работают приложения на основе Swing. Из-за введения параллелизма он значительно отличается от структурного программирования. Вы блокируете EDT (скажем, поток GUI), в результате чего кадр не отображается правильно.

Начните с чтения руководства Oracle, на том, как построить Swing-приложения, которые вы можете найти здесь: https://docs.oracle.com/javase/tutorial/uiswing/

Смежные вопросы