【问题标题】:User overriden java preferences(Windows factory ) XmlPreferencesFactory is not getting loaded用户覆盖的 java 首选项(Windows 工厂) Xml 首选项工厂未加载
【发布时间】:2023-03-29 18:40:02
【问题描述】:

我们在命令行选项中将我们的首选项工厂设置为

-Djava.util.prefs.PreferencesFactory=...preferences.XMLPreferencesFactory(我们使用自己的偏好工厂实现)

这不起作用,但代替此 windows-preference factory 正在 install4j 中使用。 同样适用于 eclipse 和其他安装工具。

片段

类 userNodeFromClassPackage;

Preferences.userNodeForPackage(userNodeFromClassPackage);

但是这个 Preferences 不会创建 xmlPreferencesFactory。似乎已经在 install4j 中调用了 Preferences,因此它返回了 windows Preferences。请帮助如何设置 -Djava.util.prefs.PreferencesFactory 变量,以便使用我们自己的 PreferencesFactory(XMLPreferencesFactory) 代替 Windows Preferences。

【问题讨论】:

  • 这是用于安装程序还是用于启动器?如果将此作为 VM 参数传递,它应该在两种情况下都可以工作,install4j 不会设置自己的首选项工厂。
  • 这个问题出在启动器上。我们尝试将上述内容作为 VM 参数传递。它确实设置了变量,当我们在应用程序中发生与首选项相关的更改时,它会保存在preferences.xml中,但是当我退出应用程序然后重新启动它时,会创建默认的preference.xml并替换旧的preferences.xml .所以用户保存的偏好会丢失。
  • 尝试从命令行使用 -J-Dinstall4j.noLoggingFix=true 启动应用程序。然后根本不访问首选项子系统。如果这有帮助,请将 -Dinstall4j.noLoggingFix=true 添加到启动器向导中的 VM 参数中。
  • 首选项未按建议工作,似乎已选择 Windows 首选项而不是 xmlPreferences。
  • Preferences 没有按建议工作,看起来 Windows 首选项代替了 xmlPreferences。我们还注意到 install4j 中的 PreferencesUtil 类也调用了preferences,我们怀疑这是造成问题,但在javasoft 我们没有注意到任何节点,但是在 HKEY_CURRENT_USER\Software\ej-technologies\install4j\installations、HKEY_CURRENT_USER\Software\ej-technologies\exe4j\jvms\c:/program files (x86)/sitemanager/jre 中创建了节点/bin/java.exe, ,如果我们删除它并再次运行我们的应用程序,它会再次创建这些节点,

标签: install4j


【解决方案1】:

在 WinLauncher 类的 Windows Installer 主方法内部调用 InstallerUtil 的 disablePreferencesLogging,它首先使用 Preferences,-J-Dinstall4j.noLoggingFix=true 不会禁用此功能,因为 Java 中的 Preferences 具有静态方法 factory(),该方法在加载类时设置其值并实例化它(WindowsPreferences、FilePreferences 或 Service bundle 等),

在您的 dev(eclipse) 设置中,当从您的代码调用它时会加载首选项,并且您的业务逻辑可能依赖于此。

希望对你有帮助

【讨论】:

  • 是的,这行得通!谢谢!我们无法找到 WinLauncher 和 InstallerUtil。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多