如何修复从内部 class 引用的局部变量必须是最终的或有效的最终错误

how to fix local variable referenced from an inner class must be final or effectively final error

你能解释一下 "local variable referenced from an inner class must be final or effectively final" 错误是什么意思吗?为什么我在声明涉及的变量为 final 后仍然得到它。

这是我的代码:

public class FenetreJeu extends JFrame {

    final Echiquier e = new Echiquier();
    FenetreJeu fj;
    final public JLabel[][] labels = new JLabel[8][8];

    Color couleur = new Color(51, 102, 0);
    final Border border = BorderFactory.createLineBorder(Color.RED, 3);

    public void moves() {

        for (int i = 0; i <= 7; i++) {
            for (int j = 0; j <= 7; j++) {
                labels[i][j].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent ee) {
                        labels[i][j].setBorder(border);
                    }

                });
            }
        }
    }
}

我在这一行中收到错误

labels[i][j].setBorder(border);

我想做的是在 mouseEvent(单击、按下或拖动)时更改标签颜色边框,我需要在 mouseClicked 方法中使用 i,j 变量。

在收到所有反馈后,我终于找到了适合我的解决方案,关键是用其他两个最终变量替换 i,j 变量,这样我就可以在 mouseClicked 方法中使用它们

   public void moves(){

    for (int i = 0; i<=7;i++){
     for ( int j=0 ; j <= 7 ; j++){
         final int k = i;
         final int l = j;
       labels[i][j].addMouseListener(new MouseAdapter() {

           @Override 
            public void mouseEntered(MouseEvent ee) {
                   labels[k][l].setBorder(border);
                   System.out.println("the case holding the "+e.cases[k][l].getPiece().getType());
            }       });
     }
}
}