Я хочу отобразить поле ввода пользователя JOptionPane в моем методе запуска класса Application (JavaFX) - PullRequest
0 голосов
/ 14 ноября 2018
public class Matrices extends Application {
    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {
        String inputValue = JOptionPane.ShowInputDialogue("Enter a value: ");
    }

    public static void main (String[] args){
        launch(args);
    }
}

Это запускает программу бесконечно и не отображает диалоговое окно JOptionPane, чтобы спросить пользователя о вводе

1 Ответ

0 голосов
/ 14 ноября 2018

Почему вы не должны использовать 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:

example image

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...