Я пытаюсь выполнить метод в другом классе, но моя ссылка равна null.У меня есть ссылка на класс, который является нулевым
У меня есть основной класс калькулятора, который начинается так:
public class Calculator {
public static void main(String[] args) {
// create new model, view and controller
Model theModel = new Model();
View theView = new View();
Controller theController = new Controller(theModel, theView);
/* start it up */
theView.CalcView();
Внутри класса вида, у меня есть кнопки, которые я создаю как таковую регистрацию контроллера в качестве слушателя:
btnZero = new JButton("0");
btnZero.addActionListener(new Controller());
btnZero.setBounds(167, 174, 86, 23);
frame.getContentPane().add(btnZero);
Также в пределах вид класса Я захватил нажатые клавиши:
private void keyPressed(KeyEvent e, Controller controller) {
controller.keyPressed(e);
}
Моя текущая цель состоит в том, чтобы выполнить метод в классе вид из класса контроллера с нажатием клавиши view.toggleBorder («1», правда);:
public void keyPressed(KeyEvent e) {
char key = e.getKeyChar();
switch (key) {
case '1':
System.out.println("1");
view.toggleBorder('1', true);
break;
Конструктор контроллера:
public Controller(Model model, View view) {
this.model = model;
this.view = view;
}
Но у меня также есть конструктор без аргументов, что я должен был сделать при регистрации контроллера в качестве слушателя, как вы видите в коде кнопки выше. Проблема в том, когда дело доходит до view.toggleBorder .., ссылка на вид имеет значение null, поэтому он выбрасывает исключение нулевого указателя. Я думаю, что есть проблема с гармонией моих классов, но я не могу найти, где могут быть проблемы. Этот код фрагментирован. Прошу прощения. Вы можете посмотреть исходные файлы на GitHub
Где вызывается исключение null-указателя? – beresfordt
@beresfordt view.toggleBorder ('1', true); внутри класса контроллера – KiloJKilo
Вашему представлению требуется ссылка на контроллер, который контролирует его. Экземпляр, который вы регистрируете на своей кнопке, не знает ни представления, ни модели.Создайте метод в представлении, называемый setController, который вы ДОЛЖНЫ звонить после того, как вы построите свой первый контроллер. – MadProgrammer