2011-03-25 19 views
2

我正在使用Swing和Swing應用程序框架(JSR 296)在Java中開發一個小應用程序。 它應該在Windows和Linux下工作。Swing應用程序框架不會在Linux中保存程序的會話(窗口發佈,大小等)

在Windows XP會話(窗口的位置,大小等)被保存,但在Linux中不是! 程序擴展了SingleFrameApplication。它應該自動保存窗口位置。 沒有爲此編寫額外的代碼。我追蹤了框架資源,但沒有發現任何錯誤。 會話存儲必須將窗口狀態保存到主文件夾中的.MyApp目錄中。該文件不存在。我有一些用戶參數,我使用java屬性手動保存到xml中,而不是會話存儲!這個文件在沒有任何問題的情況下被保存到.MyApp目錄中!

有沒有人知道爲什麼程序不保存它的狀態在Linux中,但在Windows中呢?

求解:原因是OpenJDK與SAF不兼容。在我刪除OpenJDK並從Oracle窗口安裝JDK後,變爲保存&恢復其位置和維度。

+0

爲什麼不使用'java.util.prefs.Preferences'? – 2011-03-25 16:20:16

+0

因爲Swing應用程序框架自動進行會話保存。手動儲存是一項工作。 – Exterminator13 2011-03-25 21:26:04

+1

我建議你先切換到支持的BSAF(SAF幾年來沒有看到任何活動)。這看起來像會話存儲目錄上的權限問題。 – jfpoilpret 2011-03-28 16:44:54

回答

0

Linux使用自己的WindowManager,所以由操作系統決定窗口的位置。如果您想覆蓋它,您需要將窗口的大小和位置保存到Properties對象,並在退出時將其放在某處,並在重新啓動時將其重新加載。或者,您只需撥打setLocationRelativeTo(null)即可始終將窗口置於屏幕中央。

如果您已經在使用屬性,但它沒有保存在您期望的位置,您可能需要調試它或檢查您的環境變量。

1

首先,圍繞Better Swing應用程序框架有一個活躍的社區。 ()將問題發送到那裏可能會有所幫助,或者甚至可以更好地在問題跟蹤器中創建一個全新定義環境和提取代碼的新故障單。

同時嘗試在SUN/Oracle JRE/JDK 6中使用您的應用程序。由於SAF未在Open JDK上進行測試,並且存在JDK7問題。 (XMLEncoder/XMLDecoder的不同實現)。

我希望它有幫助。