使用javafx.stage.Stage
从Modality.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)
这种行为是否有已知的解释?
答案 0 :(得分:1)
最好为对话框设置一个intiOwner,以便系统知道对话框的父框架。这使得对话框可以模态到父框架,而不仅仅是模态到任何东西。这可以解决你的问题。
ModalDialog extends Stage{
ModalDialog(Stage parentStage){
super(StageStyle.Transparent);
initOwner(parentStage);
initModality(Modality.Application_Modal);
}
这应该