2012-04-07 2 views
0

У меня возникла проблема с (я думаю) таймером качания. Я написал код, который отлично работал, а затем переместил его на новый компьютер, где он быстро не работал. Я написал класс GUI (на основе JFrame) с помощью этого метода:Проблемы с таймером качания Java

public void Splash(){ 
    mainPanel.add(Empous.splash, BorderLayout.CENTER); 
    while(Empous.splash.GetCount() < 3){ 
       //System.out.println(Empous.splash.GetCount()); 
    } 
} 

Метод вызывается из другого класса. Этот парень Empous.splash - это класс JPanel, который просто запускает анимацию всплеска. Он делает это с помощью таймера поворота. В классе заставки, слушатель настраивает содержимое моего кадра с помощью следующего кода:

private class TimerListener implements ActionListener{ 
    public void actionPerformed(ActionEvent evt) { 
     counter+=1; 
     if (counter==1){ 
      title2.setText("In Association With"); 
      title1.setText("El Pollo Diablo Productions"); 
     } 
     if (counter==2){ 
      remove(title2); 
      remove(title1); 
      repaint(); 
     } 
     if (counter==3){ 
      timer.stop(); 
     } 
    } 
} 

Теперь, если оператор печати в первом блоке закомментирован, моя программа будет замерзать после того, как таймер останавливается. Если я раскомментирую его, программа распечатает значение счетчика, а затем продолжит движение вправо, как дождь. Я хотел бы вывести заявление печати и запустить цикл while без каких-либо действий, но я не могу сделать так, как это происходит в настоящее время. Любая помощь оценивается.

+3

Возможно, вы должны создать [SSCCE] (http://sscce.org) или, по крайней мере, опубликовать больше кода. – Jeffrey

+2

Пожалуйста, изучите [Соглашения о присвоении имен Java] (http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367) и придерживайтесь их при кодировании :-) –

+0

См. [Loop doesn 'см. измененное значение без оператора печати] (https://stackoverflow.com/questions/25425130/loop-doesnt-see-changed-value-without-a-print-statement), чтобы объяснить, почему заявление печати делает разница. – Boann

ответ

4

Глядишь быть нарушение правил поточной Swing, с этим время цикла:

while(Empous.splash.GetCount() < 3){ 
    //System.out.println(Empous.splash.GetCount()); 
} 

Почему вы даже этого, так как у вас уже есть Swing, таймер, который будет обрабатывать такие вещи без freesing потока событий?

Для получения более точной рекомендации, да, отправьте сообщение sscce.

+0

А я подумал, что я опередил свои знания в java, когда столкнулся с этим. Я до сих пор не понимаю некоторые понятия потоковой обработки, поэтому я собираюсь прочитать еще кое-что - спасибо за советы. – Angineer

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