我使用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");
}
答案 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();
}