Из класса View:
@Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();

        switch (command) {
            case "Новый": {
                controller.createNewDocument();
            } break;
            case "Открыть": {
                controller.openDocument();
            } break;
            case "Сохранить": {
                controller.saveDocument();
            } break;
            case "Сохранить как...": {
                controller.saveDocumentAs();
            } break;
            case "Выход": {
                exit();
            } break;
            case "О программе": {
                showAbout();
            } break;
        }
    }
Внимание конкретно на следующий кусок кода.
case "Выход": {
    exit();
} break;
В данном куске кода нельзя вызвать просто exit(), потому что: Убедись, что если в метод actionPerformed(ActionEvent actionEvent) передано событие с командой "Выход", метод вызывает у контроллера exit(). Но, ведь, если посмотреть на метод exit() у View, то можно увидеть, что он как раз и вызывает exit() у контроллера:
public void exit() {
     controller.exit();
}
Так что получилось как-то странно. Исправьте, пожалуйста :)