开发者

Remember the values entered on standalone app on the client side

开发者 https://www.devze.com 2023-02-03 12:24 出处:网络
We have a standalone java swing app, in which the user can print something that he drew, on a printer by giving its IP.

We have a standalone java swing app, in which the user can print something that he drew, on a printer by giving its IP.

Now the requirement is that the app needs to remember the ip that was given the last time by this user.

What I could think of till now is (a brute one though) - keep a log file kind of storage on the client machine, and that everytime the app comes up it rea开发者_C百科ds the last submitted one.

Any suggestions would be helpful.

Thanks in advance.


Here's a tutorial on using the Java Preferences API to achieve what you want. From the article:

The Java Preferences API provides a systematic way to handle user and system preference and configuration data, e.g. to save user settings, remember the last value of a field etc.

I would use this approach over writing any data out explicitly to a file because its platform agnostic.


More or Less that's it. Still you can review the source code for HistoryTextField component of jEdit. http://www.jedit.org/api/org/gjt/sp/jedit/gui/HistoryTextField.html

A Sample from jEdit source:

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;
}


Since it is a Swing app., you might launch it using Java Web Start then persist the data using the PersistenceService. Here is a demo. of the PersistenceService.


i dont really recommend this, but you could use the registry also.

0

精彩评论

暂无评论...
验证码 换一张
取 消