Javafx Alert使程序冻结

时间:2015-12-11 20:04:11

标签: java javafx error-handling alert 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");
    }

1 个答案:

答案 0 :(得分:2)

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

相反,请使用Alert

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