java - javafx 上的模态对话框意外挂起

标签 java linux ubuntu modal-dialog javafx

使用 Modality.Application_MODALjavafx.stage.Stage 扩展的类导致应用程序(有时也是操作系统)挂起不可预测的时间。

我有课

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)

是否有针对此行为的已知解释?

最佳答案

最好为对话框设置一个intiOwner,让系统知道你的对话框的父框架。这使得对话框对父框架是模态的,而不是什么都不是模态的。我认为这可以解决您的问题。

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

应该这样做

关于java - javafx 上的模态对话框意外挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21551141/

相关文章:

java - 如何处理外部类型?

java - 如何创建非数据 gc.log 文件?

lxml 安装期间出现 python gcc 和 setuptools 错误

php - PHP 脚本中的 system() 命令 - 调用批处理文件...

java - 将tensorflow keras LSTM模型转换为.tflite或任何工作格式

java - 我在尝试用 int 值填充堆栈数组时遇到 OutOfMemoryError

OSX 上命令行中的 Javapackager 工具?

Java-无法打开pom.xml(maven)Ubuntu 16.04

ubuntu - 收集2 : fatal error: ld terminated with signal 9 [Killed]

ubuntu - 在 Docker 中运行 Jenkins - 立即退出