Я по-прежнему новичок в использовании MVC, и использование ActionListener дает мне проблему с запуском программы, в этом случае, когда NullPointerException приходит как вывод.Java MVC ActionListener NullPointerException
Цель имеет кнопку возврата, которая возвращает пользователя из второго меню в главное меню.
Когда я прокомментировал эту строку на контроллере, ошибка исчезнет. this.theView.addComBackButtonListener (новый CompanyBackBtnListener());
Исправьте меня, если я ошибаюсь, но я думаю, что он не может найти CompanyBackBtnListener, даже если его там.
- Проверьте наличие опечаток.
Я попытался сузить кодировки. Если я пропущу какие-либо подробности Если у вас есть какие-либо решения, скажите, пожалуйста, как я все еще изучаю Java. Спасибо.
Взгляд
public class HRMSViewGUI extends JFrame {
//Declarations here
private JButton exitCusBtn;
// Main Menu
public HRMSViewGUI()
{
this.setTitle("Human Resource Management System");
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(600,225);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.add(HRMSMenu);
// Main Menu GUI/Buttons place here.
// This contains the Main Menu buttons and GUI only.
// Second Menu
public void comMenu(){
comFrame = new JFrame();
comFrame.setTitle("Company Menu - HRMS SYSTEM");
comFrame.setResizable(false);
comFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
comFrame.setSize(600,225);
comFrame.setLocationRelativeTo(null);
comFrame.setVisible(true);
// Swings Codings... Buttons.
// This is the Back/Return button.
GridBagConstraints cusConc = new GridBagConstraints();
exitCusBtn = new JButton("Exit to Menu");
exitCusBtn.setToolTipText("Go back to the Main Menu.");
cusConc.gridx = 3;
cusConc.gridy = 8;
cusConc.fill = GridBagConstraints.HORIZONTAL;
cusConc.insets = new Insets(5,0,0,0);
cusContainer.add(exitCusBtn,cusConc);
}
void addComBackButtonListener(ActionListener listenerforComBackButton){
exitComBtn.addActionListener(listenerforComBackButton);
}
}
Контроллер
public class HRMSControlGUI {
private HRMSViewGUI theView;
private HRMSModel theModel;
public HRMSControlGUI(HRMSViewGUI theView, HRMSModel theModel){
this.theView = theView;
this.theModel = theModel;
//set Listener for the Controller to detect the ActionListener of the View.
this.theView.addComBackButtonListener(new CompanyBackBtnListener());
}
private class CompanyBackBtnListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// Enable Main Menu
theView.setEnabled(true);
}
Главная
public class HRMSapp {
public static void main(String[] args) {
HRMSViewGUI theView = new HRMSViewGUI();
HRMSModel theModel = new HRMSModel();
HRMSControlGUI theController = new HRMSControlGUI(theView, theModel);
theView.setVisible(true);
}
Я хотел, чтобы exitComBtn был создан на comMenu, который является вторым меню. Поэтому он вернет меня из второго меню в главное меню. – Mark
@Mark. Ок должна быть в состоянии добавить actionListener сразу после объявления exitComBtn. Единственное, что ваш класс слушателя - это частный класс в контроллере. Возможно, вам придется переместить его, чтобы класс вида мог его видеть. – raylee
actionListener для exitComBtn уже объявлен в нижней части контроллера – Mark