【问题标题】:Remember the values entered on standalone app on the client side记住在客户端的独立应用程序上输入的值
【发布时间】:2011-01-11 18:42:59
【问题描述】:

我们有一个独立的 java swing 应用程序,用户可以在其中通过提供其 IP 在打印机上打印他绘制的东西。

现在的要求是应用需要记住该用户最后一次提供的 ip。

到目前为止,我能想到的是(虽然很粗鲁)- 在客户端计算机上保留一种日志文件类型的存储,并且每次应用程序启动时它都会读取最后提交的文件。

任何建议都会有所帮助。

提前致谢。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    这里有一个使用 Java Preferences API 来实现你想要的东西的教程。 来自文章:

    Java Preferences API 提供了一个 系统地处理用户和 系统偏好和配置 数据,例如保存用户设置, 记住字段的最后一个值 等等

    我会使用这种方法而不是将任何数据显式写入文件,因为它与平台无关。

    【讨论】:

      【解决方案2】:

      差不多就是这样。您仍然可以查看 jEditHistoryTextField 组件的源代码。 http://www.jedit.org/api/org/gjt/sp/jedit/gui/HistoryTextField.html

      来自 jEdit 源的示例:

      public boolean save(Map<String, HistoryModel> models)
      {
          Log.log(Log.MESSAGE,HistoryModel.class,"Saving history");
          File file1 = new File(MiscUtilities.constructPath(
              jEdit.getSettingsDirectory(), "#history#save#"));
          File file2 = new File(MiscUtilities.constructPath(
              jEdit.getSettingsDirectory(), "history"));
          if(file2.exists() && file2.lastModified() != historyModTime)
          {
              Log.log(Log.WARNING,HistoryModel.class,file2
                  + " changed on disk; will not save history");
              return false;
          }
      
          jEdit.backupSettingsFile(file2);
      
          String lineSep = System.getProperty("line.separator");
      
          BufferedWriter out = null;
      
          try
          {
              out = new BufferedWriter(new OutputStreamWriter(
                  new FileOutputStream(file1), "UTF-8"));
      
              if(models != null)
              {
                  Collection<HistoryModel> values = models.values();
                  for (HistoryModel model : values)
                  {
                      if(model.getSize() == 0)
                          continue;
      
                      out.write('[');
                      out.write(StandardUtilities.charsToEscapes(
                          model.getName(),TO_ESCAPE));
                      out.write(']');
                      out.write(lineSep);
      
                      for(int i = 0; i < model.getSize(); i++)
                      {
                          out.write(StandardUtilities.charsToEscapes(
                              model.getItem(i),
                              TO_ESCAPE));
                          out.write(lineSep);
                      }
                  }
              }
      
              out.close();
      
              /* to avoid data loss, only do this if the above
               * completed successfully */
              file2.delete();
              file1.renameTo(file2);
          }
          catch(IOException io)
          {
              Log.log(Log.ERROR,HistoryModel.class,io);
          }
          finally
          {
              IOUtilities.closeQuietly(out);
          }
      
          historyModTime = file2.lastModified();
          return true;
      }
      

      【讨论】:

        【解决方案3】:

        由于它是一个 Swing 应用程序。您可以使用 Java Web Start 启动它,然后使用 PersistenceService 持久化数据。这是demo. of the PersistenceService

        【讨论】:

          【解决方案4】:

          我真的不推荐这个,但你也可以使用注册表。

          【讨论】:

          • 我不知道该怎么做。能否指点一下?
          • @kshtjsnghl Amir 的回答中的 Java Preferences APi 使用了注册表,并且这样做相对容易。
          猜你喜欢
          • 1970-01-01
          • 2010-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-16
          • 2011-04-08
          相关资源
          最近更新 更多