Вот заявление, которое я нашел на веб-сайте Java, в котором говорится об одном ключевом моменте о разнице между ними.
Как создавать диалоги
AДиалог может быть модальным.Когда модальный диалог виден, он блокирует пользовательский ввод для всех других окон в программе.JOptionPane создает JDialogs, которые являются модальными.Чтобы создать немодальное диалоговое окно, вы должны использовать класс JDialog напрямую.
Так что, похоже, вы бы использовали JOptionPane, если вы хотите, чтобы пользователь сделал выбор и закрыл окно перед возвратомна главный экран.Если вы используете окно JDialog, они могут просто щелкнуть вокруг него и вернуться к главному экрану, не делая выбора.Например, если вы хотите, чтобы пользователь выбирал количество результатов до нажатия кнопки «Отправить», вы не хотите, чтобы они могли кликать по этому окну и нажимать кнопку «Отправить».Вы должны использовать JOptionPane, чтобы заставить их сначала выбрать значение, прежде чем вернуться к отправке.