[英]Java Swing: setting variables inside actionlistener that were defined outside
我是使用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對象而不將它們作為final,則代碼可以工作。 但是我想在btnSolve監聽器中使用nums數組。
在線nums = puzzle.generate();
和nums = puzzle.solve(nums);
我收到錯誤:
無法分配最終的局部變量nums,因為它是在封閉類型中定義的
“以封閉式定義”是什么意思,應該如何做?
提前致謝。
聲明這個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(){
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.