Javafx Alert 使程序冻结

Javafx Alert makes program freeze

我使用 JavaFx (.fxml) 和模型视图控制器架构创建了一个 mp3 程序。

我想在用户单击“关于此程序”时创建一个提醒,告诉他们有关该程序的一些信息。

我遇到的问题是,现在只要按下按钮,光标就会开始旋转,我无法再单击 UI 中的任何按钮。

我尝试了在网上找到的多个代码片段,但它们都会导致我的程序冻结。

这是我的 .fxml 文件和控制器中的函数。知道为什么会结冰吗?

<center>
<TitledPane fx:id="titledPane" animated="false" maxHeight="1.7976931348623157E308" text="Music">
  <BorderPane>
    <center>
      <ListView fx:id="songList" prefHeight="200.0" prefWidth="200.0" />
    </center>
    <top>
      <HBox alignment="CENTER" padding="$x1" prefHeight="-1.0" prefWidth="-1.0" spacing="15.0" BorderPane.alignment="CENTER">
        <children>
          <Label fx:id="DirLabel" text="" wrapText="true" HBox.hgrow="NEVER" />
          <Button mnemonicParsing="false" onAction="#selectDir" text="Browse..." />
          <Button onAction="#alert" text="About this Program" />
        </children>
      </HBox>
    </top>
  </BorderPane>
</TitledPane>

控制器文件

//about the program alert
    @FXML
    private void alert(){
        JOptionPane.showMessageDialog(null, "thank you for using java");
    }

不要将 Swing 组件(如 JOptionPane)与 JavaFX 混合使用,除非您确实必须这样做。如果确实需要,您必须从 AWT 事件分派线程管理 swing 组件,从 FX 应用程序线程管理 JavaFX 节点,这会变得非常棘手。您的应用程序挂起的原因是您正试图从 FX 应用程序线程显示摆动 window,这(在某些平台上)会导致死锁(两个线程在继续之前相互等待)。

而是使用 Alert:

@FXML
private void alert() {
    new Alert(AlertType.INFORMATION, "thank you for using JavaFX").showAndWait();
}