2008-10-08 4 views
0

У нас есть Java-апплет, построенный с использованием AWT. Этот апплет позволяет выбирать изображения с жесткого диска и загружать их на сервер. Апплет включает в себя прокручиваемый список изображений, который отлично работает в Windows, Linux и Mac OS X 10.5. Мы запускаем этот апплет через Java Web Start или внутри веб-страницы.Java-апплет, обновление AWT, выпуск в Mac OS X 10.4

Наш апплет не работает должным образом в Mac OS X 10.4, независимо от версии Java (1.4 или 1.5). Вы можете найти скриншот неправильного поведения, при прокрутке, здесь:

http://www.lavablast.com/tmp/ui_error.png

Проще говоря, иногда при прокрутке изображения в конечном итоге перекрывающихся колонтитулы приложения. Такое поведение не происходит на других платформах. В Mac OS X 10.4 при прокрутке отображаются изображения в неправильном месте, что не так уж плохо, если обновить экран после покраски изображения в этом месте. Однако, похоже, что приложение не знает, что оно написано неправильно и, таким образом, не обновляется.

Если окно минимизировано, изменено или даже перемещено, приложение обновляется, а неправильно размещенные элементы исчезают, и приложение возобновляется нормально. Я потратил довольно много времени на попытку принудительного обновления фонового изображения безуспешно. (перерисовать изображение напрямую, перекрасить всех детей из нескольких панелей и т. д.) Таким образом, я ищу любые советы, которые помогут мне решить эту проблему в Mac OS X 10.4 или, в худшем случае, просто имитировать полный апплет обновить.

До недавнего времени все было совместимо с Java 1.1, но это изменилось в нескольких местах, которым теперь требуется 1.4. Я не чувствую, что эти изменения создали проблему, я просто предоставляю это как дополнительную информацию. Если вы заинтересованы в деталях реализации панели прокрутки, я буду исследовать, но я предполагаю, что это общая ошибка платформы, для которой обходные методы должны быть известны.

Чтобы воспроизвести эту проблему, откройте следующую Java Web Start приложения: http://www.lavablast.com/tmp/opal-webstart.php.jnlp

Выберите папку, содержащую множество изображений и играть с скроллинга. В какой-то момент (довольно быстро) вы должны получить проблему обновления.

Редактировать: я выполнил первое предложение здесь и заменил все мои элементы управления, которые имеют фоновое изображение с эквивалентом Swing, и проблема все еще существует. (Кроме того, есть множество других исправлений, которые мне нужно будет сделать для полного изменения). Любые другие идеи? Простая одна строка кода, которая заставляет полностью обновляться, будет отличной :)

Редактировать 2: Основной поток создает панели и запускает потоки X. Используя шаблон observer/notifier, потоки завершают и уведомляют главный элемент управления, который добавляет панель на страницу. Это делается через EventQueue.invokeLater, который, если я ошибаюсь, должен работать в правильном потоке. Проблема наиболее серьезная при прокрутке даже при отсутствии дополнительных потоков (как во время загрузки).

ответ

1

Это выглядит как смешивание легкий (как правило, свинг) и тяжелые компоненты (AWT) вместе.Переходя к Swing, вам нужно заменить каждый последний компонент AWT Swing-эквивалентами (подсказка: избегать импорта java.awt. *).

Threading часто является потенциальной проблемой для нечетных ошибок. Компоненты качания всегда должны использоваться на EDT (используйте java.awt.EventQueue.invokeLater). AWT - это поточно-безопасная теория, но не на практике - также ограничивает использование EDT.

1

Поскольку вам уже требуется Java 1.4, вы должны рассмотреть некоторые небольшие изменения, чтобы использовать SWING GUI вместо этого, он решил проблемы обновления Applet с помощью AWT. (Mac, Linux и т. Д.)

Если у вас есть, например, Панель, необходимо заменить его JPanel и т.д.

Вам нужно это:

import javax.swing.*; 

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

  • Нет связанных вопросов^_^