[英]Local Variable Accessed from within - Java
我在timer.stop()中遇到错误,它说“从类内部访问局部变量timer;需要声明为final”
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计时器= new Timer(1000,new ActionListener(){”)中,该计时器已在main(java.lang.String [])中定义,如果我删除了Timer计时器,它将在“ timer.stop()“表示可变计时器可能尚未初始化
尝试这个:
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);
}
另一种方法是这样的:
在actionPerformed而不是timer.stop()
编写((Timer)e.getSource()).stop();
。
所以问题是您声明定时器2次
Timer timer;
final Timer timer = new Timer(1000, new ActionListener() {
...
只需删除该行:
Timer timer;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.