2014-02-04 3 views
0

Класс, простирающийся от javafx.stage.Stage с использованием Modality.Application_MODAL, заставляет приложение (иногда и операционную систему) зависать в течение непредсказуемого времени.Модальное диалоговое окно на javafx зависает непредсказуемо

У меня есть класс

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

При вызове showAndWait() экземпляра указанного выше класса приложение нависает для unpredictible времени. Это происходит на Ubuntu Linux 13.10. jconsole показывает StackTrace из 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

ли [ConditionalFeature.TRANSPARENT_WINDOW] (http://docs.oracle.com/javafx/2/api/javafx/application/ConditionalFeature.html#TRANSPARENT_WINDOW) поддерживается на вашем машина? Любая информация в javadoc для этой функции помогает вам диагностировать вашу проблему? – jewelsea

ответ

1

Лучше всего установить интуицию для диалога, чтобы система узнала родительский фрейм вашего диалога. Это позволяет диалогу быть модальным для родительского кадра, а не просто быть модальным ни к чему. Я думаю, это может позаботиться о вашей проблеме.

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

Это должно сделать

Смежные вопросы