У меня возникла проблема с пользовательским JDialog
, который создается в своей собственной теме основным фреймом.JDialog не отображается
Иногда JDialog
является невидимым, но его контрольные точки являются интерактивными (если вы знаете, где их позиция). Проблема не возникает в Oracle Java 1.7, но определенно на Oracle Java 1.6 (см. 1.6.0_37 и 1.6.0_45).
Я создаю подобный диалог:
class MyDialog extends Jdialog() {
public MyDialog(JFrame frame, boolean modal) {
super(frame, modal);
[...]
}
}
В моих мейнфреймах:
MyDialog dialog = new MyDialog(myMainFrame,true);
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL);
dialog.setVisible(true);
Ожидаемое поведение блокировать события, как MouseEvents
мэйнфреймов и лежит над ним. Это отлично работает на Java 1.7.
Итак, мой вопрос в том, есть ли какие-либо особые вещи, которые следует иметь в виду при создании JDialogs
, как создать его только после того, как будет отображаться родительский кадр (владелец) или это может быть известная ошибка используемой Java JRE? Я уже проверил в журнале исправлений ошибок Oracle here без успеха.
Невозможно называть 'repaint()' или 'revalidate', как предлагает @subash. Ваша проблема звучит прерывисто, что для меня пахнет проблемой свинг-резьбы. Вы заботитесь, чтобы все свинг-звонки на EDT? И назвать длинный код с EDT? Лучше всего было бы, если бы вы могли опубликовать короткий код, который компилирует, запускает и воспроизводит вашу проблему здесь, [sscce] (http://sscce.org). –
Вы правы, SSCCE будет лучше, но моя проблема принимает участие в проекте с большим кодом, поэтому sccce, к сожалению, не воспроизведет мою проблему. Я думаю, что подсказка @Durandal приводит меня в правильном направлении, потому что это, похоже, проблема с потоками. Это объясняет, почему это происходит не всегда, а только иногда. Проблема JAVA 1.6/1.7 может быть связана с другим дизайном. Спасибо за вашу помощь! – alex