public static void go(purchase joe) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SpinnerNumberModel NumberImput =
new SpinnerNumberModel(1.00,0.00,null,1.00);
int iteration = 0;
JSpinner spinner = new JSpinner(NumberImput);
JLabel label = new JLabel("Please enter the price of the Item.");
JButton button = new JButton("Press here to continue");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
switch (iteration) {
case 0:
joe.setPrice((double)NumberImput.getNumber());
label.setText("Plese enter the amount that you are buying");
NumberImput.setValue(1.00);
iteration += 1;
break;
case 1:
joe.setAmount((int)NumberImput.getNumber());
label.setText("Plese enter the amount that you are buying");
break;
}
}
});
frame.setLayout(new FlowLayout());
frame.add(label);
frame.add(spinner);
frame.add(button);
frame.setSize(600, 500);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
joe.setPrice((double)NumberImput.getNumber());
}
您正在使用迭代+=1;
。这是对局部变量的赋值。现在ActionListener对象的寿命比局部变量长;actionPerformed可以在方法的调用消失后调用。
为此,Java虚拟机向ActionListener添加了一个新变量iteration
,即副本。为了防止分配给局部变量迭代
会使另一个迭代
过时,语言决定局部变量必须是常量,而不是分配给“有效的final”。
AtomicInteger iteration = new AtomicInteger();
... iteration.getAndIncrement();
但是,由于ActionPerformed
,所以只需删除Iteration
。您可以在ActionListener中使用一个字段。
button.addActionListener(new ActionListener() {
int iter;
@Override
public void actionPerformed(ActionEvent e) {
switch (iter) {
case 0:
joe.setPrice(NumberImput.getNumber().doubleValue());
label.setText("Please enter the amount that you are buying");
NumberImput.setValue(1.00);
iter++;
break;
case 1:
joe.setAmount(NumberImput.getNumber().intValue());
label.setText("Please enter the amount that you are buying");
break;
}
}
});
@Override
public void actionPerformed(ActionEvent e){
我正在尝试创建一个I*J数量的按钮。 提前多谢。
我的主类在方法中运行。它运行一个可能需要大量时间才能完成的进程,所以我创建了另一个方法来停止该进程:它只是引发一个标志,使整个进程停止: 为了测试停止进程的方法,我应该采取什么方法来解决这个问题?
问题内容: 我是lambda和Java8的新手。我面临以下错误。 封闭范围中定义的局部变量日志必须是final或有效的final 问题答案: 该消息说,到底是什么问题:你的变量 数 必须是最后的(即:携带关键字决赛),也可以有效地最终(即:你只有一个值分配给它 一旦 拉姆达外)。否则,您将无法在lambda语句中使用该变量。 但是,当然,这与您使用 log 冲突。关键是:您不能在lambda内部写
问题内容: 我收到错误提示,就像在主题中一样,请问如何修复…错误在menuItem循环中,在这里我尝试将textArea前景颜色设置为从menuItem中选择的一种:(colors [mi]) 问题答案: 该错误意味着 您不能在内部类中使用局部变量。 要在内部类中使用变量,必须对其进行声明。只要是循环计数器并且不能分配变量,就必须创建一种变通方法来获取可在内部类内部访问的变量中的值: 因此,您的代
今天我想做一些我想完成的项目,在那里我得到了一个异常,我不能从lambda表达式中引用局部变量。我有一个方法,其中我给出了两个值,该方法检查值对是否已经在HashMap中 当它结束时,我想读出布尔函数,需要知道他是否发现它成立= false我怎样才能在这个lambda中设置founded或者有没有其他方法可以做到这一点?
这个问题在这里已经有了答案: > 为什么匿名类只能访问最终变量? 为什么对于实例变量[重复]忽略“Lambda表达式中使用的变量必须是final或实际上是final”警告 “lambda在start方法参数被垃圾回收后才能运行”是什么意思? 为什么要复制?