Javafx警报使程序冻结

Javafx警报使程序冻结,java,javafx,error-handling,alert,freeze,Java,Javafx,Error Handling,Alert,Freeze,我使用JavaFx(.fxml)和model-view-controller架构创建了一个mp3程序 我想在用户单击“关于此程序”时创建一个警报,告诉他们有关此程序的一些信息 我的问题是,现在每当按下按钮时,光标开始旋转,我无法在UI中单击更多按钮 我尝试了在网上找到的多个代码片段,但它们都导致我的程序冻结 这是我的.fxml文件和控制器中的函数。知道为什么会结冰吗 <center> <TitledPane fx:id="titledPane" animated="false"

我使用JavaFx(.fxml)和model-view-controller架构创建了一个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>

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

相反,请使用:


定义“冻结”。mp3停止播放还是UI挂起?我不知道这是什么意思。我的光标开始旋转,它会永远加载,我无法再点击UI中的任何按钮
//about the program alert
    @FXML
    private void alert(){
        JOptionPane.showMessageDialog(null, "thank you for using java");
    }
@FXML
private void alert() {
    new Alert(AlertType.INFORMATION, "thank you for using JavaFX").showAndWait();
}