У вас в этом участке кода какая-то путаница:
if (Objects.equals(selectedOption, options[0])) {
menu.setVisible(true);
viewer.dispose();
} else {
viewer.setVisible(false);
....
Если options[0]=="Exit" а options[1]=="Restart"; то для закрытия приложения нужно сделать
System.exit(0);
Изменение параметров видимости окна "setVisible" и закрытие программы, это не одно и тоже.
Проблема с логикой: Судя по вашему коду, вы создаёте объект класса
GraphicsViewer(model)
и позиционируете его при нажатии "Exit" вместо завершения программы.