我是使用swing的新手,我在使用动作听众时遇到了麻烦。我有一个动作监听器设置为按下按钮时,当我尝试设置在监听器外定义的变量的值时,我收到一条错误消息。这是代码
// create puzzle object and array for puzzle numbers
final Puzzle puzzle = new Puzzle();
final int[][] nums = new int[9][9];
// create buttons
JButton btnSolve = new JButton("Solve");
btnSolve.setEnabled(false);
JButton btnGenerate = new JButton("Generate");
// When generate button is clicked
btnGenerate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// generate puzzle
nums = puzzle.generate();
// fill board with puzzle
fillBoard(nums);
// enable solve button
btnSolve.setEnabled(true);
}
});
// When solve button is clicked
btnSolve.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// solve the puzzle
nums = puzzle.solve(nums);
// fill board with solved puzzle
fillBoard(nums);
}
});
如果我在btnGenerate监听器中声明nums和puzzle对象而没有它们是最终的,代码就可以工作。但是我想在btnSolve监听器中使用nums数组。
在nums = puzzle.generate();
行和nums = puzzle.solve(nums);
行上收到错误:
无法分配最终的局部变量nums,因为它是在封闭类型中定义的
“在封闭式中定义”是什么意思?应该如何做?
提前致谢。
答案 0 :(得分:2)
将此final int[][] nums = new int[9][9];
声明为类成员,而不是final
。消息很清楚。您无法修改final
的内容。您可能也可能不需要使用Puzzle
public class MyClass {
int[][] nums = new int[9][9]; <-- class member instead of in constructor
Puzzle puzzle = new Puzzle();
public MyClass(){
}
}