Невозможно хранить логические настройки реестра Windows 10 из Java, в то время как целое число и строка хранятся правильно - PullRequest
0 голосов
/ 23 апреля 2019

Я использую пример из 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) начальный запуск для сохранения настроек:

верно 23 апреля 2019 г. 10:56:22 java.util.prefs.WindowsPreferences Привет, мир ВНИМАНИЕ: Не удалось открыть / создать привилегированный корневой узел prefs Software \ JavaSoft \ Prefs в корневом каталоге 0x80000002. Windows RegCreateKeyEx (...) вернул код ошибки 5. 50

2) второй прогон, который уже читает значения, записанные при первом прогоне:

верно 23 апреля 2019 г. 10:56:57 java.util.prefs.WindowsPreferences Привет Европа ВНИМАНИЕ: Не удалось открыть / создать привилегированный корневой узел prefs Software \ JavaSoft \ Prefs в корневом каталоге 0x80000002. Windows RegCreateKeyEx (...) вернул код ошибки 5. 45

Вы можете заметить, что значения int и String извлекаются правильно и не заменяются значениями по умолчанию, в то время как логическое значение не извлекается и заменяется значением по умолчанию (т. Е. Оба выхода дают значение true, тогда как ожидание было достичь ложного при втором запуске).

1 Ответ

0 голосов
/ 24 апреля 2019

Я был здесь не прав: я упустил тот факт, что ключ ID1 удален из настроек:

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

если я это закомментирую, все будет работать как положено.

...