Наличие такой ссылки обратного вызова является распространенным явлением. Например, каждый раз, когда используется анонимный внутренний класс, у анонимного экземпляра ActionListener есть неявная ссылка на его внешний класс, который представляет собой JFrame или JPanel, создающий действие.
Проблема, с которой вы столкнулись, заключается в том, что конструктор вашего действия пытается получить доступ к элементам JFrame, и эти элементы еще не доступны, поскольку он также находится на стадии создания.
Самый чистый способ, вероятно, состоит в том, чтобы создать фрейм, и как только фрейм будет полностью создан, создайте все действия, ссылающиеся на фрейм. Таким образом, вы убедитесь, что не выходите из кадра, пока он не будет использован:
private JFrameVcView () {
// calls the init() method which creates all the components
}
private void createActions() {
// create the actions and sets them on the buttons.
}
public static JFrameVcView createFrame() {
JFrameVcView view = new JFrameVcView(); // calls the init() method which creates all the components
view.createActions(); // when this method is called, the frame has all its buttons
return view;
}
Вы также можете вызвать fenetre.getTextFieldList()
в методе actionPerformed действия вместо вызова его в конструкторе.