我想在我的Application类(JavaFX)的启动方法中显示JOptionPane用户输入框

时间:2018-11-13 21:44:19

标签: javafx joptionpane

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 :(得分:2)

为什么不应该使用JOptionPane

请勿在JavaFX应用程序中使用JOptionPane

JOptionPane用于Swing库,而不是JavaFX库。

通常,除非有充分的理由,否则不要混合使用Swing和JavaFX代码,即使那样,也必须注意如何管理集成(例如线程管理),以确保获得最佳结果。

使用JavaFX对话框

使用JavaFX DialogAlert代替JOptionPane

对于您的特定情况,您正在使用JOptionPane来收集输入,因此与此等效的JavaFX对话框是TextInputDialog

为什么您的应用无法退出

关于应用程序为何无法完成的原因,请参见Application文档:

  

等待应用程序完成,发生以下任一情况:

     
      
  • 应用程序调用Platform.exit()
  •   
  • 最后一个窗口已关闭,并且Platform上的hiddenExit属性为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);
    }
}