Java removeMouseListener方法不起作用

Java removeMouseListener方法不起作用,java,swing,Java,Swing,removeMouseListener不起作用:如果我单击旧的JLabel,它仍然会添加到可变分数中。每次经过时间间隔时,旧对象应移除mouseListener,而新对象应是唯一具有该对象的对象 Timer picTimer = new Timer(1000, new ActionListener(){ int oldrr=0; int oldrc=0 ; final int[] score = {0};

removeMouseListener不起作用:如果我单击旧的JLabel,它仍然会添加到可变分数中。每次经过时间间隔时,旧对象应移除
mouseListener
,而新对象应是唯一具有该对象的对象

Timer picTimer = new Timer(1000, new ActionListener(){

            int oldrr=0;
            int oldrc=0 ;
            final int[] score = {0};
            @Override
            public void actionPerformed(ActionEvent e) {
                MouseAdapter act = new MouseAdapter(){

                    @Override public void mouseClicked(MouseEvent e){

                        score[0]++;
                        lblTimer.setText(String.valueOf(score[0]));

                      }
                    };
                arrayWM[oldrr][oldrc].removeMouseListener(act);
                arrayWM[oldrr][oldrc].setIcon(null);
                Random random = new Random();
                arrayWM[oldrr][oldrc].setIcon(null);
                int rr = random.nextInt(3 - 0 + 1) + 0;
                int rc = random.nextInt(3 - 0 + 1) + 0;
                oldrr = rr;
                oldrc = rc;
                arrayWM[rr][rc].setIcon(new ImageIcon("img/one.jpg"));


                arrayWM[rr][rc].addMouseListener(act );
            }
        });

每次触发
计时器
时,您都会创建另一个
MouseAdapter
实例,并尝试从
JLabel
中删除此实例,但标签上没有注册该实例。然后,将另一个
MouseListener
实例添加到标签中,使每次注册到任何一个标签的
MouseListener
的数量复合

相反,创建一个
MouseAdapter
的实例并重复使用,可能是这样的

Timer picTimer = new Timer(1000, new ActionListener() {

    int oldrr = 0;
    int oldrc = 0;
    final int[] score = {0};
    MouseAdapter act = new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {

            score[0]++;
            lblTimer.setText(String.valueOf(score[0]));

        }
    };

    @Override
    public void actionPerformed(ActionEvent e) {
        arrayWM[oldrr][oldrc].removeMouseListener(act);
        arrayWM[oldrr][oldrc].setIcon(null);
        Random random = new Random();
        arrayWM[oldrr][oldrc].setIcon(null);
        int rr = random.nextInt(3 - 0 + 1) + 0;
        int rc = random.nextInt(3 - 0 + 1) + 0;
        oldrr = rr;
        oldrc = rc;
        arrayWM[rr][rc].setIcon(new ImageIcon("img/one.jpg"));

        arrayWM[rr][rc].addMouseListener(act);
    }
});
考虑提供一个说明你的问题的方法。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。如果每次调用
计时器时都创建一个
MouseAdpater
的新实例,那么调用
removeMouseListener(act)
就没有效果,因为标签上没有注册该
MouseListener