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