java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 09.06.2012, 00:33   #1 (permalink)
Benutzer
double
 
Registriert seit: 09.02.2011
Fachbeiträge: 69
Abgegebene Danke: 25
Erhielt 0 Danke für 0 Beiträge
Standard statische Methoden auf eine LinkedList initialisieren?

Hallo,

ich versuche mich gerade an einer kleinen Kundenverwaltung und bin hier auf ein Problem gestoßen.

Ich verwende zum Speichern und Laden meiner Kundenliste die serialisierung was auch funktioniert. Ich habe eine Klasse CustomerList in deren Konstruktor die deserialisierung stattfindet.
Diese Klasse hat nur statische Methoden damit ich von außen auf diese zugreifen kann und nur eine Liste existiert (soweit korrekt?)

Mein Problem ist jetzt nur wenn ich meine Hauptanwendung starte wann wird der Konstruktor von dieser Klasse aufgerufen oder wie muss ich das tun damit die Liste "da" ist und ich sie in meinen folgenden Methoden nutzen kann?

Derzeit macht meine main Methode in meinem Hauptfenster einfach ein
new CustomerList();

Sobald ich dann allerdings das Fenster für die Kundenverwaltung öffne und auf mein CustomerList.getFirst() zugreifen möchte erhalte ich eine NPE.

Ist es so, dass eine statische variable beim ersten new "da" ist bis das Programm stirbt? Oder muss ich dennoch Objekte meiner CustomerList erstellen um auf die Funktionen zugreifen zu können?

Man bin ich verwirrt... ist ja auch spät.

Grüße Javalui
javalui ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 09.06.2012, 01:56   #2 (permalink)
Java-Forum Team
IRC-Operator (Java-Chat)
Moderator
 
Registriert seit: 09.04.2010
Fachbeiträge: 5.577
Blog-Einträge: 2
Abgegebene Danke: 3
Erhielt 844 Danke für 814 Beiträge
Naja, alles in einem lässt sich das kaum ohne Code beantworten. Du könntest natürlich den static Block verwenden:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
public class CustomerList {
  private static List<WhatEver> list;
  static {
    list = initList();
    ....
  }
}
Dann musst du immerhin nicht einmalig den Konstruktor aufrufen. Jedoch sind die statischen Sachen "nur weil es eben cool ist von überall darauf zuzugreifen" nie eine gute Idee.
Die statischen Variablen sind auch vor dem ersten new "da".
Was einen Fehler in deiner Methode deiner Klasse deines Programms angeht - der Fehler liegt wohl in deinem Code
XHelp ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 09.06.2012, 10:58   #3 (permalink)
Benutzer
double
Themenstarter
 
Registriert seit: 09.02.2011
Fachbeiträge: 69
Abgegebene Danke: 25
Erhielt 0 Danke für 0 Beiträge
Statisch wollte ich die Klasse deshalb machen, weil später in meinem Programm auch noch eine Auftragsverwaltung usw. hinzukommen soll diese aber alle nur eine gemeinsame Kundenliste verwenden sollen.

Kann ja mal bischen code einfügen...

CustomerList:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
public class CustomerList implements Serializable {
    private static LinkedList<Customer> customerList;
 
    public CustomerList() {
        customerList = (LinkedList<Customer>) Serializer.deserialize(Globals.CUSTOMERDATAPATH); // Kundenliste deserialisieren
        if (customerList == null) { // Wenn nicht geglückt dann neue erstellen
            customerList = new LinkedList<Customer>();
        }
    }
 
...

CustomerWindow:
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
...
    /**
    * Konstruktor für das Kundenverwaltungs-Fenster
    */
    public CustomerWindow() {
        actualCustomer = CustomerList.getFirst(); // Den ersten Kunden aus der Liste als aktuellen wählen
        initGUI(); // Oberfläche initialisieren
...}

Hauptfenster konstruktor
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
...
    public MainWindow() {
        new CustomerList(); // Soll das deserialisieren im Konstruktor der CustomerList auslösen
        initialize(); // Initialisiert die Oberfläche des Hauptfensters
    }
...


Hierbei noch eine 2. Frage ich habe eine Klasse Globals die nur Pfadangaben zu den Serialisierungs-Dateien besitzt (Serializer ist eine Klasse von mir die das Serialisieren übernimmt) ist das so in Ordnung oder sollte man das irgendwie anders handhaben?

Grüße
Javalui
javalui ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 09.06.2012, 23:18   #4 (permalink)
Benutzer
double
Themenstarter
 
Registriert seit: 09.02.2011
Fachbeiträge: 69
Abgegebene Danke: 25
Erhielt 0 Danke für 0 Beiträge
Hat hier keiner mehr eine Hilfe für mich?
javalui ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 11.06.2012, 21:40   #5 (permalink)
Benutzer
double
Themenstarter
 
Registriert seit: 09.02.2011
Fachbeiträge: 69
Abgegebene Danke: 25
Erhielt 0 Danke für 0 Beiträge
Bin jetzt selbst auf die Lösung gekommen.

Da ich meine linkedlist statisch deklariert habe wird diese nicht serialisiert und deshalb kommt aich beim deserialisieren nix mehr raus -> NPE

Serialisierung speichert eben nur instanzvariablen mit... Hätte ich wissen sollen


Grüße javalui
javalui ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 11.06.2012, 21:49   #6 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.021
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
bereits beantwortete Themen haben es schwer unter vielen anderen,
gerade um 00:18 eine Erinnerung zu schreiben ist aber auch gefährlich, für Nachtschwärmer gibts vielleicht Aufmerksamkeit,
Tag-Besucher sehen das Thema schon kaum mehr vorne

edit: auch noch am Wochenende.., na man sollte meinen da haben viele Zeit
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
LinkedList Methodenproblem nakertaa Hausaufgaben 7 20.05.2012 23:11
KO-Turnier devo22 Hausaufgaben 8 29.11.2011 13:47
LinkedList vorgänger Knoten zurück geben Lisa1988 Java Basics - Anfänger-Themen 4 25.11.2010 21:16
LinkedList Methoden selbst schreiben Leuchtturm Hausaufgaben 4 08.05.2010 13:17
statische Methoden und Vererbung static methode Allgemeine Java-Themen 6 25.01.2010 12:33


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de