您确定该name
变量具有相同的值吗?因为它应该返回正确的存储值——也许值是空的?
尝试在存储和获取之前将它们打印出来。
您还可以尝试在存储后刷新首选项:
prefs.flush();
如果您使用的是 Windows,您可以检查首选项是否存储regedit
在
\HKEY_CURRENT_USER\Software\JavaSoft\Prefs\<your package path>
在 Linux 中我不确定,但你的主目录中应该有一个隐藏文件夹。就像是
~/.java/.prefs/<package path>
我开发了一个 JFrame 使用首选项来存储框架的最后位置和大小。你可以在这里查看:
可记忆框架
该库位于:
java-utils
您可能感兴趣的一段代码:
public void saveSize() {
Preferences preferences = Preferences.userNodeForPackage(this.getClass());
preferences.put(getId() + X_KEY, String.valueOf(getLocation().x));
preferences.put(getId() + Y_KEY, String.valueOf(getLocation().y));
preferences.put(getId() + W_KEY, String.valueOf(getSize().width));
preferences.put(getId() + H_KEY, String.valueOf(getSize().height));
preferences.put(getId() + MAX_KEY,
String.valueOf((getExtendedState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH));
try {
preferences.flush();
}
catch(BackingStoreException e) {
e.printStackTrace();
}
}
public void setSavedSize() {
Preferences preferences = Preferences.userNodeForPackage(this.getClass());
String xs = preferences.get(getId() + X_KEY, "");
String ys = preferences.get(getId() + Y_KEY, "");
String ws = preferences.get(getId() + W_KEY, "");
String hs = preferences.get(getId() + H_KEY, "");
String max = preferences.get(getId() + MAX_KEY, "");
if(max != null && !max.trim().isEmpty() && Boolean.valueOf(max) == true) {
setDefaultSize();
setExtendedState(JFrame.MAXIMIZED_BOTH);
return;
}
if(xs.length() == 0 || ys.length() == 0 || ws.length() == 0 || hs.length() == 0) {
setDefaultSize();
}
else {
sizeFromPreferences = true;
int x = Integer.parseInt(xs);
int y = Integer.parseInt(ys);
int w = Integer.parseInt(ws);
int h = Integer.parseInt(hs);
setLocation(x, y);
setSize(w, h);
}
}
编辑
如果您想创建某种设置存储系统,您可以使用与RememberableFrame
使用中前缀相同的约定。
在RememberableFrame
我使用:
private String getId() {
return this.getClass().getSimpleName() + id;
}
id
开发人员提供的自定义字符串或空字符串在哪里。但请记住,您要设置的属性的键有长度限制。
从 API:
static int MAX_KEY_LENGTH
Maximum length of string allowed as a key (80 characters).
static int MAX_NAME_LENGTH
Maximum length of a node name (80 characters).
static int MAX_VALUE_LENGTH
Maximum length of string allowed as a value (8192 characters).
您也可以考虑使用专门用于“存储设置”目的的类。例如类KeyboardSettings
,甚至在不同的包中。