【问题标题】:Java storing user preferencesJava 存储用户首选项
【发布时间】:2016-04-09 21:56:12
【问题描述】:

我正在制作一个带有简单 GUI 的程序,用户必须在开始使用该程序之前进行登录。 我想存储用户名和密码,如果用户选中“记住我”复选框,我希望他下次不需要输入数据。 我尝试使用 Java Preferences API,这样:

private Preferences prefs = Preferences.userRoot().node(this.getClass().getName());
prefs.put("codCliente", txtCodCliente.getText());
prefs.put("username", txtUsername.getText());
prefs.put("password", DigestUtils.md5Hex(String.valueOf(txtPassword.getPassword())));

但是如果我关闭并重新打开应用程序,如果我打印变量的内容,它会返回“Null key”NullPointerException。

我尝试将它们保存在 .properties 文件中,但我不想每次都覆盖整个文件,如果我尝试使用 apache commons 配置,使用 setProperty,我无法将值放在变量。

存储此类数据的最佳方式是什么?

谢谢大家。

【问题讨论】:

  • 您可以在用户登录时为其分配时间戳。如果他们点击记住我,只需分配 1 天的持续时间,直到过期。
  • 你应该使用Preferences.userNodeForPackage(MyClass.class),而不是userRoot().node(this.getClass().getName())。始终使用类文字(如 MyClass.class)而不是 getClass(),因此继承不会导致首选项存储在您未预料到的位置。
  • @piyush121 问题是我在关闭应用程序时无法保存数据。
  • @VGR 试过了,但不保存数据

标签: java preferences


【解决方案1】:

是的,偏好是非常简单和好的方法,问题是:

他下次不用输入数据了

这意味着他不会将任何内容放入文本字​​段中。

但是如果我关闭并重新打开应用程序,如果我打印 变量,它返回“Null key” NullPointerException。

你期待什么?当他再次启动他的应用程序时,您再次将此 NULL 值放入首选项中。

您的设计存在问题

应用程序启动-> 阅读复选框状态的首选项-> {reread login credentials} else {nothing} -> 显示登录 ui ,用户输入凭据 ->{将凭据与其首选项比较} 不要存储任何东西,为什么每次启动应用程序时都要存储用户尝试登录的内容?

您仅在创建用户时存储凭据,使用加密并存储您的数据,包括名称和密码。

在您的问题中,没有足够的代码可以直接帮助您使用代码示例,您的设计有问题,您在代码中在哪里阅读此信息?你为什么不把这部分贴在这里?你只是向我们展示你存储了一些东西,好吧,这对那些试图帮助你的人来说毫无用处。

我建议您坐下来,停止编写代码,并编写您自己的应用程序启动和登录过程的流程图,以及当您读取/写入任何偏好等时。

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多