有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法从Java将布尔首选项存储到Windows 10注册表,而整数和字符串已正确存储

我正在使用来自https://www.vogella.com/tutorials/JavaPreferences/article.html的示例和以下代码:

import java.util.prefs.Preferences;

public class PreferenceTest {
  private Preferences prefs;

  public void setPreference() {
    // This will define a node in which the preferences can be stored
    prefs = Preferences.userRoot().node(this.getClass().getName());
    String ID1 = "Test1";
    String ID2 = "Test2";
    String ID3 = "Test3";

    // First we will get the values
    // Define a boolean value
    System.out.println(prefs.getBoolean(ID1, true));
    // Define a string with default "Hello World
    System.out.println(prefs.get(ID2, "Hello World"));
    // Define a integer with default 50
    System.out.println(prefs.getInt(ID3, 50));

    // now set the values
    prefs.putBoolean(ID1, false);
    prefs.put(ID2, "Hello Europa");
    prefs.putInt(ID3, 45);

    // Delete the preference settings for the first value
    prefs.remove(ID1);

  }

  public static void main(String[] args) {
    PreferenceTest test = new PreferenceTest();
    test.setPreference();
  }
}

下面是后续运行的输出:

1)初始运行以保存首选项:

真的 2019年4月23日晚上10:56:22爪哇。util。prefs。窗口首选项 你好,世界 警告:无法在根0x8000002处打开/创建prefs根节点Software\JavaSoft\prefs。Windows RegCreateKeyEx(…)返回错误代码5。 五十

2)已读取第一次运行时写入的值的第二次运行:

真的 2019年4月23日晚上10:56:57爪哇。util。prefs。窗口首选项 你好,欧罗巴 警告:无法在根0x8000002处打开/创建prefs根节点Software\JavaSoft\prefs。Windows RegCreateKeyEx(…)返回错误代码5。 45

您可能会注意到,int和String值被很好地检索到,并且没有被默认值替换,而boolean值没有被检索到,而是被替换为默认值(即,两个输出在那里都为true,而期望在第二次运行时达到false)


共 (1) 个答案

  1. # 1 楼答案

    我在这里错了:我忽略了ID1键从首选项中删除的事实:

    // Delete the preference settings for the first value
        prefs.remove(ID1);
    

    如果我把它评论出来,一切都会按预期进行