Почему вы не должны использовать JOptionPane
Не используйте JOptionPane
в приложении JavaFX.
JOptionPane
предназначен для библиотеки Swing, а не для библиотеки JavaFX.
Как правило, не следует смешивать код Swing и JavaFX, если у вас нет для этого веских причин, и даже тогда вынеобходимо тщательно следить за тем, как вы управляете интеграцией (например, управлением потоками), чтобы обеспечить наилучший результат.
Используйте диалог JavaFX
Вместо JOptionPane
, используйтеJavaFX Dialog
или Alert
.
В вашем конкретном случае вы используете JOptionPane
для сбора ввода, поэтому эквивалентный диалог JavaFX для этого - TextInputDialog
.
Почему ваше приложение не выходит
Относительно того, почему приложение не завершено, см. Документацию Application
:
Ожидаетзавершение приложения, что происходит, когда происходит одно из следующих действий:
- приложение вызывает Platform.exit ()
- , последнее окно было закрыто и атрибут implicitExit на платформеtrue
Поскольку вы никогда не показываете окно JavaFX и не закрываете его, и никогда не вызываете Platform.exit()
, приложение никогда не закрывается.
Эта проблема не возникает при отображении TextInputDialog
, потому что это окно JavaFX.После того, как вы введете значение и закроете диалоговое окно ввода, приложение автоматически закроется (если диалоговое окно было единственным окном, которое в данный момент отображается для приложения).
Рабочий пример
Вот пример, который использует TextInputDialog
вместо JOptionPane
:
import javafx.application.Application;
import javafx.scene.control.TextInputDialog;
import javafx.stage.Stage;
import java.util.Optional;
public class TextInputDialogExample extends Application {
private Optional<String> getValueFromUser() {
TextInputDialog dialog = new TextInputDialog("xyzzy");
dialog.setTitle("Value Input");
dialog.setHeaderText("Enter a value:");
dialog.setContentText("Value:");
return dialog.showAndWait();
}
@Override
public void start(Stage stage) {
Optional<String> value = getValueFromUser();
value.ifPresent(System.out::println);
}
public static void main(String args[]) {
launch(args);
}
}