Проблема рисования окна Java - PullRequest
       18

Проблема рисования окна Java

4 голосов
/ 17 сентября 2010

Мое приложение не рисует себя при запуске. При изменении его размера или уменьшении / увеличении окно приложения окрашивается.

Эта проблема появляется только на компьютерах с Windows (я тестировал XP, Vista и Windows 7). На Mac OS X и Linux приложение работает нормально.

На машинах установлена ​​java 6. Мое приложение использует AWT, поэтому не Swing. Я пытался использовать Swing (так что вместо Frame это JFrame), но это не решает проблему.

Я проверил вызовы repaint (), update () и paint () фрейма. Все они появляются, и изображение для рисования доступно. Я также проверил, сделаны ли эти вызовы в потоке EDT. В этом случае. При изменении размера окна (или минимального / максимального значения) система выполняет вызов paint (), и изображение рисуется.

Я боюсь, что мне не хватает чего-то действительно очевидного. Я делаю кадр видимым, проверяю его (также проверенный с помощью invalidate) и перекрашиваю. Этого достаточно в Mac OS X и Linux.

У кого-нибудь есть предложения, что мне делать или что еще попробовать?

Заранее спасибо

Maurice

Ответы [ 3 ]

1 голос
/ 02 октября 2010

Возможно, вы захотите проверить эту уловку отладки с помощью пользовательского RepaintManager.Это помогло мне отследить некоторые хитрые прерывистые колебания свинга.

http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html

1 голос
/ 17 сентября 2010

Я предполагаю, что вы переопределяете Frame.paint. Вы, вероятно, получите лучшие результаты от рисования в JPanel (или Canvas, если вы настаиваете на устаревшем AWT), и когда вы это сделаете, убедитесь, что вы переопределяете paintComponent JPanel, а не рисовать. В некоторых случаях JLabel с ImageIcon может быть еще проще.

Как и другие предлагали, попробуйте опубликовать контрольный пример.

0 голосов
/ 19 сентября 2010

Трудно диагностировать проблему, не видя никакого исходного кода, но загружено ли изображение полностью?

AWT загружает изображения в фоновом режиме после, так что даже если вызов Toolkit.getImage() может вернуть действительныйImage экземпляр, это не значит, что изображение загружается к тому времени.Вы можете использовать MediaTracker для отслеживания этого.

...