没有阶段的 JavaFx FileChooser

Mr *_*ner 2 java jfilechooser javafx stage filechooser

我在学习JavaFx的过程中,遇到了一个问题。我尝试使用 JavaFx 中的 FileChooser,就像我习惯在 main() 方法中使用 Swing 中的 JFileChooser 一样。但是我发现我需要一个 Window 对象。我尝试寻找解决方法,但没有找到。我还尝试过 null (就像您在 JFileChooser 中所做的那样)和 new Stage(),所以这些都不在讨论之列。我试图模仿 JFileChooser.showOpenDialog()。有什么合理的方法可以让它发挥作用吗?

Jam*_*s_D 5

main方法不在 FX 应用程序线程上执行,因此您无法FileChooser从中显示 a。(在 Swing 中也不能真正做到这一点,除非您使用SwingUtilities.invokeLater(...)。)

在 JavaFX 中,启动应用程序的责任在方法中start(),该方法在 FX 应用程序线程上执行。(在许多运行时环境中,您甚至不需要mainJavaFX 应用程序中的方法。)

只需从启动方法中显示文件选择器,您可以在其中访问(或者如果您愿意,primaryStage可以直接传递):null

public class MyApp extends Application {

    public void start(Stage primaryStage) {
        FileChooser configFileChooser = new FileChooser();
        File configFile = configFileChooser.showOpenDialog(primaryStage);

        // ... parse file and create UI, etc...

        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 仅仅因为您可以做到这一点,并且它恰好在您的特定平台上运行,并不意味着它就是正确的。Swing 中的代码不正确:它显示来自非事件调度线程的线程的“JFileChooser”。无法保证它可以在其他平台或未来版本中运行。这是一个非常常见的错误,因此 JavaFX 会不厌其烦地检查线程(在许多情况下)并在不正确时抛出异常。 (2认同)