Java:在GUI应用程序启动时保存设置,但不恢复首选项



在我的Java应用程序中,我有许多保存的值和设置,我希望在应用程序启动时尽快获得。所有这些值都应该存储在一个单例中。例如,我有一个JDialog,我使用以下命令保存文件的路径:

AppSingleton appSingleton = AppSingleton.getInstance( );
private Preferences prefs;
private void btnSetPanelSetNavdataActionPerformed(java.awt.event.ActionEvent evt) {                                                      
        appSingleton.setNavdataPath(txtNavdataPath.getText());
        prefs = Preferences.userRoot().node(this.getClass().getName());
        prefs.put("NAVDATA_PATH", txtNavdataPath.getText());
        dispose();
}

我正在检查,值被保存。

这是我的单例:

public class AppSingleton 
{
    private static AppSingleton instance = null;   
    private String navdataPath = "";
    private AppSingleton() 
    {
    }
    public static AppSingleton getInstance() 
    {
        if(instance == null) 
        {
            instance = new AppSingleton();
        }
      return instance;
    }
    public String getNavdataPath() {
        return navdataPath;
    }
    public void setNavdataPath(String navdataPath) {
        this.navdataPath = navdataPath;
    }

    public void initDefaultValues()
    {
        Preferences prefs = Preferences.userRoot().node(this.getClass().getName());
        this.navdataPath = prefs.get("NAVDATA_PATH","");
        System.out.printf("CHECK DEFAULT: %s",this.navdataPath);
    }
}

我试图从初始化JFrame的类中的main()方法中获取保存的值:

public static void main(String args[]) {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() 
        {
            public void run() {
                new IGAMainFrame().setVisible(true);
                /* HERE!!! */
                AppSingleton appSingleton = AppSingleton.getInstance();
                appSingleton.initDefaultValues();
            }
        });
}

但是这些值不是从Preference类初始化的。"CHECK DEFAULT"显示空字符串。我不明白为什么,是否有一个更好的做法,恢复所有保存的值,当一个GUI应用程序启动。

谢谢!

btnSetPanelSetNavdataActionPerformed里面的行prefs = Preferences.userRoot().node(this.getClass().getName());改为prefs = Preferences.userRoot().node(Appsingleton.class.getName());里面的按钮点击方法,this.getClass()不是AppSingleton

最新更新