记住在客户端的独立应用程序上输入的值

时间:2011-01-11 18:42:59

标签: java swing

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

现在要求应用程序需要记住此用户最后一次给出的ip。

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

任何建议都会有所帮助。

提前致谢。

4 个答案:

答案 0 :(得分:5)

这是一个使用Java Preferences API来实现您想要的内容的教程。 来自文章:

  

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

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

答案 1 :(得分:1)

或多或少就是这样。您仍然可以查看HistoryTextField jEdit 组件的源代码。 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;
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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