Устранение неполадок: JDialog, который является модальным и все же не модальным? - PullRequest
1 голос
/ 16 марта 2009

Это озадачено, но, может быть, просто возможно, кто-то уже сталкивался с этой проблемой и может указать мне правильное направление.

У меня есть JDialog для отображения хода выполнения длительной задачи, которую я явно создал как модальную с определенным владельцем:

  progressDialog = new JDialog( ((Dialog)windowParent), true );
  ...
  progressDialog.setVisible( true );

Позже, когда задача будет выполнена, я снова закрою диалоговое окно:

protected void done() {
  SwingUtilities.invokeLater( new Runnable() {
     public void run() {
        progressDialog.setVisible( false );
     }
  } );
}

В очень редких случаях диалоговое окно а) не закрывается и б) не является по-настоящему модальным, то есть пользователь может взаимодействовать с окном, расположенным за (теоретическим) диалогом. Есть идеи, что может быть причиной этого? К сожалению, это происходит очень редко и до сих пор только в системах Linux. Может ли это быть ошибкой Swing или я что-то не так делаю?

1 Ответ

1 голос
/ 17 апреля 2009

Несмотря на то, что я не могу дать окончательного решения вашей проблемы, я могу вам сказать, что я видел все виды странного поведения с модальными диалоговыми окнами в Linux - многие из них зависят от используемого оконного менеджера.

Для нашей системы торговых точек мы использовали очень минималистичный оконный менеджер "flwm", поскольку он предоставлял самые надежные и желаемые свойства. Однако не рекомендую его для современного рабочего стола Linux.

Что касается самой модальности: если вы можете использовать Java 6, вы можете посмотреть изменения и улучшения модальности JDK6: Sun Blog и сопровождающий Javadoc для диалога .ModalExclusionType

...