javafx上的模态对话框无法预测地挂起

时间:2014-02-04 11:25:43

标签: java linux ubuntu modal-dialog javafx

使用javafx.stage.StageModality.Application_MODAL扩展的类导致应用程序(有时也是操作系统)在不可预测的时间内挂起。

我有一个班级

ModalDialog extends Stage{
    ModalDialog(){
        super(StageStyle.TRANSPARENT);
        initModality(Modality.APPLICATION_MODAL);
    }
}

在调用上述类的实例的showAndWait()时,应用会挂起一段不可预测的时间。这发生在Ubuntu Linux 13.10上。 jconsole显示JavaFX-ApplicationThread的堆栈跟踪:

com.sun.glass.ui.gtk.GtkApplication.enterNestedEventLoopImpl(Native Method)
com.sun.glass.ui.gtk.GtkApplication._enterNestedEventLoop(GtkApplication.java:144)
com.sun.glass.ui.Application.enterNestedEventLoop(Application.java:384)
com.sun.glass.ui.EventLoop.enter(EventLoop.java:83)
com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(QuantumToolkit.java:523)
javafx.stage.Stage.showAndWait(Stage.java:398)

这种行为是否有已知的解释?

1 个答案:

答案 0 :(得分:1)

最好为对话框设置一个intiOwner,以便系统知道对话框的父框架。这使得对话框可以模态到父框架,而不仅仅是模态到任何东西。这可以解决你的问题。

ModalDialog extends Stage{
     ModalDialog(Stage parentStage){
       super(StageStyle.Transparent);
       initOwner(parentStage);
       initModality(Modality.Application_Modal);
   }

这应该