2013-09-23 7 views
0

я получаю ошибку в timer.stop(), он говорит, что «локальная переменная таймера доступны внутри класса, должен быть объявлен окончательный»Локальная переменная Accessed изнутри - Java

public static void main(String args[]) { 
    int tick; 
    Timer timer; 


     timer = new Timer(1000, new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       int tick=0; 
       System.out.println("Success" + ++tick); 
       if (tick > 4) { 
        timer.stop(); 
       } 
      } 
     }); 
     timer.setInitialDelay(0); 







    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 

Я попытался это:

public static void main(String args[]) { 

    int tick; 
    Timer timer; 


    final Timer timer = new Timer(1000, new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     int tick=0; 
     System.out.println("Success" + ++tick); 
     if (tick > 4) { 
      timer.stop(); //this refers to the final variable timer, this is valid. 
     } 
    } 
      }); 
     timer.setInitialDelay(0); 







    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 

и теперь ошибка приходит на "конечный таймере Timer = новый таймер (1000, новый ActionListener() {", что таймер уже определен основной (java.lang.String []) и если i удаляет таймер таймера, он показывает ошибку на «timer.stop()», что переменный таймер, возможно, не был инициализирован

+0

... и в чем вопрос? – Claudiu

+0

@csoroiu Что ???? –

+0

текст был неполным, когда я прочитал его первым. Он был отредактирован несколько минут назад. – Claudiu

ответ

2

Попробуйте это:

public static void main(String[] args) { 
    class Listener implements ActionListener { 
     int tick = 0; 
     Timer timer = null; 
     public void setTimer(Timer timer) { 
      this.timer = timer; 
     } 
     public void actionPerformed(ActionEvent e) { 
      tick++; 
      if (tick > 4) { 
       timer.stop(); 
      } 
     } 
    } 
    Listener listener = new Listener(); 
    Timer timer = new Timer(1000, listener); 
    listener.setTimer(timer); 
    timer.setInitialDelay(0); 
} 
+0

Не wroking человек. –

+0

попробуйте это, вы можете добавить сеттера к реализации actionlistener. Таймер и ActionListener взаимозависимы, поэтому вам нужно сделать это обходным путем. –

+0

Я не мог понять, что вы только что сказали, может у вас объяснить ... @U Mad –

0

поэтому проблема вы объявляете таймера 2 раза

Timer timer; 

final Timer timer = new Timer(1000, new ActionListener() { 
... 

просто удалить строку:

Timer timer; 
+0

когда я удаляю таймер таймера; он показывает ошибку в «timer.stop()», что таймер, возможно, не был инициализирован @csoroiu –

1

Другой способ заключается в следующем:

В actionPerformed вместо timer.stop() написать письмо ((Timer)e.getSource()).stop();.

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