Почему JFrame не отвечает? - PullRequest
0 голосов
/ 06 ноября 2010

У меня есть JFrame и два JPanels. Когда моя программа запускается, она добавляет первый JPanel к JFrame. Все компоненты JFrame (x, минимизировать, KeyListener и т. Д.) Работают. но когда я удаляю первую JPanel и добавляю вторую JPanel, кнопка JFrame 's' x 'не будет работать, а также не будет KeyListener или MouseListener. Как мне заставить JFrame работать правильно?

1 Ответ

0 голосов
/ 06 ноября 2010

Если основные операции с графическим интерфейсом перестают функционировать после внесения изменений в ваши компоненты, есть большая вероятность того, что вы нарушили модель потоков Swing.Swing является однопоточным, и вы должны следовать простому правилу, гарантирующему, что действия, которые влияют на рисование GUI, выполняются в потоке диспетчеризации событий, или вы рискуете тупиковой или другого нежелательного поведения.

У вас есть пара вариантов.Вы можете использовать SwingWorker или создать экземпляр Runnable и перетащить его в SwingUtilities.invokeLater или SwingUtilities.invokeAndWait.Взгляните на эту ссылку , чтобы ознакомиться с концепциями потоков в Swing.

...