2016-12-05 1 views
0

Сначала я начинаю на Java. У меня проблема с ошибкой checkstyle, упомянутой в заголовке темы.Проблема с проверкой в ​​ActionListener: ссылка на переменную экземпляра 'x' нуждается в этом. ' в Java

Подумайте о том, похож код:

public class myClass { 
    JButton[] buttons; 

     public myClass() { 
     this.buttons = new JButton[2]; 
     //constructor code.... 

     this.buttons[0].addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) {     
         firstMethod(0, 1); 
         secondMethod(5, 10); 
        } 
       }); 

     } 

     public void firstMethod(int x, int y) { 
     // do something 

    } 

     public void secondMethod(int x, int y) { 
     // do something 

    } 

    } 

В constructior я создал OnClick событие для кнопки из атрибута buttons, где при нажатии кнопки она будет выполнять метод firstMethod(int, int) и secondMethod(int, int), все работает, конечно, но checkstyle бросает мне ошибку. По каким-то причинам я не могу просто использовать this.firstMethod(), поскольку я внутри другого объекта (ActionListener).

Любые идеи о том, как бросить ссылку myClass в actionListener?

+0

Возможно, но ошибка проверки не упоминается в опубликованном сообщении, поэтому я не нашел решение. – t4dohx

ответ

1

Блок new ActionListener() { ... }; фактически создает новый анонимный класс. Внутри этого блока this относится к ActionListener. Чтобы обратиться к внешнему объекту myClass, используйте myClass.this.

+0

Да, это то, что я искал. Большое спасибо! :) – t4dohx

1

Используйте myClass.this вместо обычного this, чтобы обратиться к экземпляру внешнего класса. Также используйте прописные буквы для классов, поэтому MyClass, а не myClass.

+0

Да, я знаю, я ошибся, написав быстрый пример. Спасибо за ответ. – t4dohx

Смежные вопросы