deserialize singleton

ZebaX

Mitglied
Hallo,

ich hab folgenden Code

Java:
ublic class Properties implements Serializable{

	private static final long serialVersionUID = 895L;
	private static Properties properties;
	private String path = "../fx_Prop/properties.ser";
	private String name;
	
	private Properties() {
		
	}
	
	public static Properties getInstance(){
		if(properties == null)
			properties = new Properties();
		
		return properties;
	}

	public void setName(String name){
		this.name = name;
	}

	public String getName(){
		return this.name;
	}

	public void LoadProperties(){
		try
		{
			FileInputStream fileIn = new FileInputStream(this.getClass().getResource(path).toURI().getPath().toString());
			if(fileIn.available() > 0){
			      ObjectInputStream in = new ObjectInputStream(fileIn);
			      properties = (Properties) in.readObject();
			      in.close();
			      fileIn.close();
			}
			
		}catch(IOException i){
			i.printStackTrace();
			return;
		}catch(ClassNotFoundException c){
			c.printStackTrace();
			return;
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private Object readResolve() throws ObjectStreamException { 
		return getInstance(); 
	} 
	
	public void SaveProperties(){
		try
		{
			
			FileOutputStream fileOut = new FileOutputStream(this.getClass().getResource(path).toURI().getPath().toString());
			ObjectOutputStream out = new ObjectOutputStream(fileOut);
			out.writeObject(properties);
			out.close();
			fileOut.close();
		}catch(IOException | URISyntaxException i)
		{
			i.printStackTrace();
		}
	}

	public int hasCode() {
		return 810;
	}


}

Aber jedesmal wenn ich mir den Namen über getName() holen möchte ist dieser null. Kann jemand weiter helfen?
 

ZebaX

Mitglied
ich ruf iwo außerhalb Properties.getInstance().setName("Test") auf und anschließend Properties.getInstance().SaveProperties();

und beim erneuten Start vom Programm halt erst Properties.getInstance().LoadProperties(); und anschließend System.out.println(Properties.getInstance().getName());
 

tagedieb

Top Contributor
Ich wuerd mal die Logik zum lesen und schreiben und das Datenobjekt in 2 Klassen aufteilen und somit die Komplexitaet zu verringern. Am besten hat das Datenobjekt auch keine statischen variablen. Dann sollte es ohne Probleme funktionieren.

Ausserdem sollten methoden kleinGeschrieben werden und
Code:
hasCode()
sollte wohl eher
Code:
hashcode()
heisen??
 

ZebaX

Mitglied
Ich würde das aber nur ungern wollen.

jupp hashCode() sollte das heißen und das mit den Methoden kleinschreiben ist bekannt trägt aber grad nicht wirklich zur lösung des Problems bei ;)
 

ZebaX

Mitglied
hab iwo nen paar zeilen code gefunden und da stand die mit bei, wenn ich die rausnehme funktioniert es auch nur wenn ich den code wie folgt abänder:

Java:
public String getName(){
		return properties.name;
}
 

anti-held

Bekanntes Mitglied
Ach ja was ich dazu noch verbessern würde ist, dass die beiden Methoden load und save statisch sein sollten.
Auch die Variable path.

Dann sollte es auch mit dem this.name funktionieren.
 

anti-held

Bekanntes Mitglied
Also bei mir funktioniert es mit folgendem Code.

Java:
public class Properties implements Serializable {
	private static final long serialVersionUID = 895L;
	private static Properties properties;
	private static String path = "properties.ser";
	private String name;

	public static void main(String[] args) {
		// Properties.getInstance().setName("Test2");
		// Properties.SaveProperties();

		Properties.LoadProperties();
		System.out.println(Properties.getInstance().getName());
	}

	private Properties() {
	}

	public static Properties getInstance() {
		if (properties == null)
			properties = new Properties();
		return properties;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return this.name;
	}

	public static void LoadProperties() {
		try {
			FileInputStream fileIn = new FileInputStream(path);
			if (fileIn.available() > 0) {
				ObjectInputStream in = new ObjectInputStream(fileIn);
				properties = (Properties) in.readObject();
				in.close();
				fileIn.close();
			}
		} catch (IOException i) {
			i.printStackTrace();
			return;
		} catch (ClassNotFoundException c) {
			c.printStackTrace();
			return;
		}
	}

	public static void SaveProperties() {
		try {
			FileOutputStream fileOut = new FileOutputStream(path);
			ObjectOutputStream out = new ObjectOutputStream(fileOut);
			out.writeObject(properties);
			out.close();
			fileOut.close();
		} catch (IOException i) {
			i.printStackTrace();
		}
	}

	public int hasCode() {
		return 810;
	}
}

also mit this.name
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N serialize deserialize java object über string Allgemeine Java-Themen 8
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
J Singleton Allgemeine Java-Themen 5
A Singleton threadsafe Allgemeine Java-Themen 8
S Singleton Instanz löschen Allgemeine Java-Themen 5
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
T ActionListener und Singleton Allgemeine Java-Themen 15
S Singleton Entwurfsmuster Allgemeine Java-Themen 20
T So eine Art Singleton-Factory? Allgemeine Java-Themen 3
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
S Singleton hier sinnvol? Allgemeine Java-Themen 20
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
B Volatile Frage: Reicht es nur den Singleton als volatile zu deklarieren? Allgemeine Java-Themen 4
Iron Monkey Singleton mit Parameter Allgemeine Java-Themen 14
G Singleton Frage: Allgemeine Java-Themen 17
M Singleton und Vererbung? Allgemeine Java-Themen 45
R Wo initilisiere ich eine Liste in einem Singleton? Allgemeine Java-Themen 2
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
B Generisches Singleton implementieren Allgemeine Java-Themen 12
H Singleton und MultiThreading [erledigt] Allgemeine Java-Themen 3
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
P SingleTon Allgemeine Java-Themen 5
M zwei Threads - ein singleton-Objekt Allgemeine Java-Themen 3
RaoulDuke Agent als Singleton Thread Allgemeine Java-Themen 7
S singleton vs. static Allgemeine Java-Themen 7
P Singleton vs static Allgemeine Java-Themen 19
K Singleton vererben Allgemeine Java-Themen 15
E Singleton vererben Allgemeine Java-Themen 10
E Frage zu Singleton Allgemeine Java-Themen 22
D Design Pattern: Singleton Allgemeine Java-Themen 4
K Sequenzdiagramm für Singleton-Muster Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben