2016-08-19 1 views
0

Dans mon application Java, j'ai un certain nombre de valeurs et de paramètres enregistrés que j'aimerais obtenir dès le démarrage de l'application. Toutes ces valeurs sont censées être stockées dans un singleton. Par exemple, j'ai un JDialog, où je sauve un chemin à mon dossier en utilisant ceci:Java: les paramètres enregistrés avec les préférences ne sont pas restaurés lorsqu'une application GUI démarre

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

Je vérifie et la valeur est enregistrée.

Ceci est mon singleton:

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

Je suis en train d'obtenir les valeurs enregistrées à partir de la méthode principale() dans la classe qui initialise le JFrame:

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

Mais les valeurs ne sont pas initialisé à partir de la classe Préférence. "CHECK DEFAULT" montre une chaîne vide. Je ne comprends pas pourquoi et s'il existe une meilleure pratique de restauration de toutes les valeurs enregistrées lors du démarrage d'une application graphique.

Merci!

+0

DEFAULT CHECK est une chaîne vide, car la valeur par défaut que vous fournissez est « » (chaîne vide). Une question pour vous est de savoir quelle classe est le premier bloc de code. Êtes-vous sûr que this.getClass(). GetName() est la même lors de l'enregistrement et de la récupération. Vous n'avez pas mentionné la classe dans laquelle le premier bloc de code existe. – Kode

+0

Vous vous demandez simplement où vous êtes censé appeler 'btnSetPanelSetNavdataActionPerformed()'? – Mordechai

+0

Le bouton, la méthode main() et le singleton sont trois classes différentes. –

Répondre

1

Modifier la ligne prefs = Preferences.userRoot().node(this.getClass().getName()); à l'intérieur btnSetPanelSetNavdataActionPerformed-prefs = Preferences.userRoot().node(Appsingleton.class.getName()); intérieur méthode bouton de clic, this.getClass() ne AppSingleton