我尝试从jtextfield获取整数输入,并在单击jbutton时将其设置为计时器jlabel的整数,但在MouseEvent方法中不断出现此错误
从内部类引用的局部变量必须是final或有效final
编码:
private void timerStartMouseClicked(java.awt.event.MouseEvent evt) {
int a = Integer.parseInt(timerInput.getText());
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
timeLeft.setText(Integer.toString(a));
--a;
if (a == -1){
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
timer.cancel();
} else if(isRunning){
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
}
}
};
timer.scheduleAtFixedRate(task, 1000, 1000);
}
我对计时器事件和鼠标事件还是个新手,我试图将a
声明为全局变量,这仍然会给我带来同样的错误,除非我在方法中声明它是一个值,但我需要从jtextfield获得输入。
1条答案
按热度按时间qgelzfjb1#
没有测试过,但我认为这会起作用。
当这个方法结束时,
a
作为一个局部变量会消失,因此使用它是不安全的。如果变量是final
,那么Java可以安全地将a
的值复制到内部类中。但是,您需要修改a
,这样常量值就不起作用了。所以我们只需要把值复制到一个不同的变量中,一个 * 在 * 内部类中的变量,这样一切都可以正常工作了,因为现在内部类有了自己的变量。