Swing Application Framework не сохраняет сессию программы (размещение окна, размер и т. Д.) В Linux - PullRequest
2 голосов
/ 25 марта 2011

Я занимаюсь разработкой крошечного приложения на Java с использованием Swing и Swing Application Framework (JSR 296).Он должен работать в Windows и Linux.

В Windows XP сессия (оконная позиция, размер и т. Д.) Сохраняется, а в Linux - нет!Программа расширяет SingleFrameApplication.Это должно сохранить положение окна автоматически.Никакого дополнительного кода для этого не написано.Я проследил источники фреймворка, но не нашел ничего плохого.Хранилище сессий должно сохранять состояние окна в .MyApp dir в домашней папке.Файла там нетуУ меня есть некоторые пользовательские параметры, которые я сохраняю в xml вручную, используя свойства java, а не хранилище сессий!Этот файл без проблем сохраняется в папке .MyApp в домашней папке!

Кто-нибудь знает, почему программа не сохраняет свое состояние в Linux, а в Windows это делает?

решено: Причина в том, что OpenJDK несовместим с SAF.После того, как я удалил OpenJDK и установил JDK из Oracle, окна стали сохранять и восстанавливать их позиции и размеры.

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Прежде всего, существует активное сообщество вокруг Better Swing Application Framework.() Может быть полезно отправить ваш вопрос туда, или, что еще лучше, создать новый билет для отслеживания проблем с полным определением вашей среды и выдержек из вашего кода.

Тем временем попробуйте использовать ваше приложение с SUN / Oracle JRE / JDK 6. Поскольку SAF не тестируется на Open JDK, и у него есть проблема с JDK7.(Различные реализации XMLEncoder / XMLDecoder).

Надеюсь, это было полезно.

0 голосов
/ 25 марта 2011

Linux использует свой собственный WindowManager, поэтому решение о том, куда направить окно, зависит от ОС.Если вы хотите переопределить его, вам нужно сохранить размер и расположение окна в объекте Properties и поместить его куда-нибудь при выходе, загрузить его снова при перезапуске.Или вы можете просто позвонить по номеру setLocationRelativeTo(null), чтобы окно всегда было в центре экрана.

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

...