2015-06-06 2 views
0

У меня есть некоторый код для таймера следующим образом:INT для ошибки таймера: Локальные переменные ансы, определенные в рамках ограждающих должны быть окончательными или эффективно окончательным

JLabel label = new JLabel(); 

JButton btnNewButton = new JButton("Stop Server after X Seconds"); 
btnNewButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 

     int ans = functions.secC(); 

     Timer t = new Timer(1000, new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       label.setText("Server will shutdown in: "+ans+ "seconds"); 
       ans--; 
      } 
     }); 
     t.start(); 
    } 
}); 
panel.add(btnNewButton); 
panel.add(label); 

И на ans--; линиях я получаю этот код ошибки:

Local variable ans defined in an enclosing scope must be final or effectively final 

Я не уверен, что я должен сделать, чтобы исправить эту ошибку, я играл с, что делает его финал, но это не работает ..

+0

Как вам сделать его «окончательным»? Отправьте код, который не работает для вас. – Maroun

ответ

1

Вы можете определить ans как final;

final int ans = functions.secC(); 

Но если ans не нужен нигде, вы могли бы просто определить его как поле экземпляра Timer;

Timer t = new Timer(1000, new ActionListener() { 
    private int ans = functions.secC(); 
    public void actionPerformed(ActionEvent e) { 
     label.setText("Server will shutdown in: "+ans+ "seconds"); 
     ans--; 
    } 
}); 

Но в этом случае, я бы, вероятно, также отключить кнопку, так как вы на самом деле не в любом случае знать, если пользователь уже нажал на кнопку или нет ...

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

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