Swing Application Framework не сохраняет сессию программы (размещение окна, размер и т. Д.) В Linux
Я занимаюсь разработкой крошечного приложения на 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 ответа
Прежде всего, существует активное сообщество вокруг Better Swing Application Framework. () Может быть полезно отправить ваш вопрос туда, или, что еще лучше, создать новый тикер для отслеживания проблем с полным определением вашей среды и выдержек из вашего кода.
В то же время попробуйте использовать ваше приложение с SUN/Oracle JRE/JDK 6. Поскольку SAF не тестируется на Open JDK, и у него есть проблема с JDK7. (Различная реализация XMLEncoder/XMLDecoder).
Я надеюсь, что это было полезно.
Linux использует свой собственный WindowManager, поэтому решение о том, куда направить окно, зависит от ОС. Если вы хотите переопределить его, вам нужно сохранить размер и расположение окна в Properties
Объект и положить его куда-нибудь, когда вы выходите, загружая его снова, когда вы перезапустите. Или вы можете просто позвонить setLocationRelativeTo(null)
чтобы окно всегда было в центре экрана.
Если вы уже используете свойства, но не сохраняете то, что ожидали, вам может потребоваться его отладка или проверка переменных среды.