NullpointerException - mal wieder -warum?

Status
Nicht offen für weitere Antworten.

Daishi1002

Mitglied
Ich hab mal wieder ein kleines Problem.

Ich hab das Problem auf ein einfaches Codestück eingerenzen können. Ich will eine statisches Liste machen, die halt nur einmal erzeugt wird und als Kommunikation zwischen verschiedenen Threads dienen soll. Allerdings gibts Probleme. Zunächst einmal der Code

Meine Statische Liste:
Code:
import java.util.*;

class Item{
	int i;
	Item(){i=0;}
}

public class MyList {
	static Vector myList;
	MyList(){
		Vector MyList = new Vector();
	}
	
	public void add(Item item){
		myList.add(item);
	}
}

und eine kleine Klasse, die das ganze startet:
Code:
public class Starter {

	public static void main(String[] args) {
		MyList test = new MyList();
		test.add(new Item());
	}
}

Dabei tritt eine NullPointerException auf, wenn "public void add(Item item)" auf die "MyList test" zugreift. Ich verstehe aber nicht, warum. "test" wird ja im Konstruktor definiert, aber in "add()" scheint java das Object nicht mehr zu kennen.

Ich benutze Eclipse 3.0.2 und JRE 1.5 auf Win2000.

Ich hoffe, ich hab das Problem nicht zu umständlich gepostet und mich an alle Forenrichtlinien gehalten
 

Wildcard

Top Contributor
Code:
Vector MyList = new Vector();
damit wird ein Vector MyList erzeugt der nur im Konstruktor existiert. Mit myList hat der überhaupt nichts zu tun.
Das ist sowieso irgendwie Blödsinn, weil jedes Objekt das auf die add Methode zugreifen will eine Instanz von
MyList erzeugen muss, und damit deinen Vector überschreibt. Wenn das überhaupt sinnvoll ist was du da vorhast, solltest du das Singelton-Pattern verwenden.
 

Daishi1002

Mitglied
Okay, dachte eigentlich, das oben wäre schon eine "Art" Singleton Pattern.

Ich versuche jetzt fogendes zu implementieren:
Code:
public class ClassicSingleton {
   private static ClassicSingleton instance = null;

   protected ClassicSingleton() {
      // Exists only to defeat instantiation.
   }
   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance;
   }
}

Wobei dann "instance" mein "MyList" Object ist. Würde das funktionieren? Schauen wir mal

Danke schon mal für den Tip, Wildcard
Gruß
Daishi
 

Daishi1002

Mitglied
Ich nochmal. Ich hab gestern den ganzen Tag am Singleton Pattern rumprobiert und viel gelesen.

Eine Sache ist mir jetzt noch unklar. Wenn ich einen "private constructor" benutze, damit die Klasse nicht ausserhalb sich selbst instanziiert wird, wie kann ich dann die Klasse überhaupt erschaffen?

Ich glaube, meine Singleton-Klasse ist soweit richtig aufgebaut. Allerdings wenn ich in meiner Main.Methode mein Singleton erschaffen will, dann kommt die Fehlermeldung (vom Compiler), dass der Constructor nicht sichtbar ist (klar, er ist ja auch private).
Code:
public class Starter {

	public static void main(String[] args) {
		Singleton test = new Singleton();
		test.add(new Item());
	}
}

Der Fehler tritt in Zeile 4 auf.

Die Liste, die in meiner Problemstellung global sein soll, kann man jetzt nur per add erreichen, andere (Abfrage)-Möglichkeiten fehlen hier noch. Die Initialisierung des Vectors passiert im privaten Constructor, ist dass richtig?

Meine Singleton Klasse sieht jetzt so aus:
Code:
import java.util.*;

public class Singleton
{
  static private Singleton _instance;
  private Vector myList;
  
  //privater constructor
  private Singleton() {
  	Vector myList = new Vector();
  }

  public static Singleton getInstance() {
    if (_instance == null) {
      synchronized(Singleton.class) {
        if (_instance == null)
          _instance = new Singleton();
      }
    }
    return _instance;
  }

  public void add(Item item){
  	 myList.add(item);	
  }
  
}

Vielen Dank schonmal,
Gruß
Daishi1002
 

Daishi1002

Mitglied
Bin ein Schritt weiter, allerdings immer noch nicht problemfrei.

Ich weiss jetzt, wie ich auf mein Singleton zugreife (Singleton.java ist immer noch so wie oben):


Code:
Singleton.getInstance().add(new Item());

Allerdings bekomme ich jetzt wieder eine NullPointerException (Zeile 24 von Singleton.java)

Wieso? Diesmal hab ich myList doch initialisiert im Konstruktor (Zeile 10)
Code:
Vector myList = new Vector();

Wäre klasse, wenn Ihr da nochmal draufschauen könntet.

Aber ne Menge gelernt hab ich bis hier schon - tolles Forum!

Gruß
Daishi1002
 
B

bygones

Gast
der gute alte global / lokal Fehler :)

Code:
public class Singleton
{
  static private Singleton _instance;
  private Vector myList;
 
  //privater constructor
  private Singleton() {
     Vector myList = new Vector();
  }
du defnierst einmal myList global, im Konstruktor aber nochmals lokal -> nicht die selben... lass das Vector im Konstruktor weg dann wird der globale angesprochen.

ich persönlich würde die getInstance Methode anders schreiben... zuviel Code ;)

also so:
Code:
public class Singleton
{
  private static Singleton _instance = new Singleton();
  private Vector myList;
 
  //privater constructor
  private Singleton() {
     myList = new Vector();
  }

  public static Singleton getInstance() {
    return _instance;
  }
 
T

TheSunToucher

Gast
Im Eclipse gibt's unter Window -> Preferences -> Compiler -> Errors/Warnings -> Local variable hides another field or variable die Möglichkeit sich warnen zu lassen, falls eine lokale Variable ein Feld der Klasse verdeckt, also eine Warnung um genau diesen (möglichen) Fehler zu verhindern. (das gilt für 3.1M6 bei 3.0 ist aber auch irgendwo in der Gegend zu finden)

Außerdem solltest du die Methoden in einem Singleton unter umständen synchronisieren, ich habe mal ziemlich lange nach einem Fehler gesucht, weil ich die Methoden nicht synchronisiert hatte: Methoden_synchronisieren_wenn_das_Singleton-Pattern_benutzt_wird


Ist ein bischen Off-Topic, aber ich habe eine Zwischenfrage @deathbyaclown. Du hast die variable "_instance" genannt, hat das einen Grund? Gibt's eine Konvention dafür? Hab das schon mehrfach in Code gesehen, weiß aber nicht was das soll mit dem "_" vorneweg...

Code:
static private Singleton _instance;
 

Bleiglanz

Gesperrter Benutzer
Ich nochmal. Ich hab gestern den ganzen Tag am Singleton Pattern rumprobiert und viel gelesen.
Offenbar nicht genug: das double checked locking funktioniert in Java nicht, der Code
Code:
  public static Singleton getInstance() {
    if (_instance == null) {
      synchronized(Singleton.class) {
        if (_instance == null)
          _instance = new Singleton();
      }
    }
    return _instance;
  }
ist leider kaputt
 

Daishi1002

Mitglied
Bleiglanz hat gesagt.:
Offenbar nicht genug: das double checked locking funktioniert in Java nicht ...


Das double checked locking kaputt ist, hab ich auch irgendwo gelesen, aber dass es in meinen Code gekommen, war mir nicht bewusst.

Welcher Teil davon ist denn genau das "double checked locking"? Hat jemand einen interessanten Artikel darüber?

Und ich fürchte "_instance" kommt von mir, nicht von deathbyaclown.. Ich hab es von dieser Seite.

Ich sitze weiter dran - und mache Fortschritte! Melde mich noch

Gruß
Daishi1002
 

Daishi1002

Mitglied
Problem gelöst!
Wie bekomme ich jetzt den Haken hinter Thread?

Für interessierte, hier nochmal der Code:

Code:
import java.util.*;

public class Singleton{
  static private Singleton _instance;
  private Vector lockedPorts = new Vector();
  
  //private constructor
  private Singleton() {}

  static public Singleton getInstance() {
    if (_instance == null) 
      _instance = new Singleton();
    return _instance;
  }

  public boolean lockPort(Port port){ ... }

  
  public boolean unlockPort(Port port){ ...  }
}

und ein Testaufruf
Code:
public class Starter {

	public static void main(String[] args) {
		System.out.println("Locke Port 5");
		Singleton.getInstance().lockPort(new Port(5));
		
		System.out.println("Locke Port 5");
		boolean test = Singleton.getInstance().lockPort(new Port(5));
		System.out.println(test);
	}
}

Das "double checked locking" ist wieder raus geflogen, soweit ich das verstanden hab, ist es auch nur eine performance Verbesserung für die getInstance()-Methode.

Vielen Dank allen, die geholfen haben!
Gruß
Daishi1002
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Wieder ein NullPointerException Problem Java Basics - Anfänger-Themen 21
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
C Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 10
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
berserkerdq2 Nullpointerexception, obwohl ich Array initialisiere? Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
Jose05 Nullpointerexception Java Basics - Anfänger-Themen 7
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
H Java NullPointerException Java Basics - Anfänger-Themen 4
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
L Threads Komischer NullPointerException Java Basics - Anfänger-Themen 2
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
D NullPointerException im Array Java Basics - Anfänger-Themen 4
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
V NullPointerException Java Basics - Anfänger-Themen 2
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
scratchy1 NullPointerException Java Basics - Anfänger-Themen 19
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
W Optional<T> - NullPointerException Java Basics - Anfänger-Themen 37
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
L Variablen NullPointerException bei Dateigröße (Nr.1) Java Basics - Anfänger-Themen 4
M Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 13
D NullPointerException umgehen Java Basics - Anfänger-Themen 17
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
A NullPointerException Java Basics - Anfänger-Themen 6
S NullPointerException Java Basics - Anfänger-Themen 4
T OOP Wörterbuch NullPointerException Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
O NullPointerException Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
L Variablen Unerklärliche NullPointerException Java Basics - Anfänger-Themen 2
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Threads NullPointerException Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
kodela NullPointerException Java Basics - Anfänger-Themen 12
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H NullPointerException obwohl Objekt angelegt wurde Java Basics - Anfänger-Themen 1
A Threads Reentrantlock | NullpointerException möglicher Deadlock? Java Basics - Anfänger-Themen 0
K Compiler-Fehler NullPointerException lösen Java Basics - Anfänger-Themen 16
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
P Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 1
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
Z OOP - Array ständig NullPointerException Java Basics - Anfänger-Themen 4
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
T Nullpointerexception und es wird nichts angezeigt Java Basics - Anfänger-Themen 15
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
B ProcessMessage NullPointerException Java Basics - Anfänger-Themen 11
shiroX Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 9
MrSnake ItemListener mit NullPointerException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
M NullPointerException Java Basics - Anfänger-Themen 8
B Vererbung NullPointerException Java Basics - Anfänger-Themen 38
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
G NullPointerException Java Basics - Anfänger-Themen 1
J NullpointerException Java Basics - Anfänger-Themen 1
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M String-Vergleich und NullPointerException Java Basics - Anfänger-Themen 4
D Java Fehler: NullPointerException Java Basics - Anfänger-Themen 1
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
X Problem mit NullPointerException Java Basics - Anfänger-Themen 2
K NullPointerException in der Hashtable Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Hilfestellung bei einer NullPointerException Java Basics - Anfänger-Themen 1
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
L NullPointerException Java Basics - Anfänger-Themen 11
M Nullpointerexception??? Java Basics - Anfänger-Themen 2
W NullPointerException bei DefaultListModel Java Basics - Anfänger-Themen 5
N NullPointerException bei Konsolenausgabe Java Basics - Anfänger-Themen 5
J Klasse in Klasse; NullPointerException Java Basics - Anfänger-Themen 8
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
Q NullPointerException Java Basics - Anfänger-Themen 5
H NullPointerException Java Basics - Anfänger-Themen 5
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K NullPointerException wird geworfen, bitte um Hilfe! Java Basics - Anfänger-Themen 7
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
J Char-Array - NullPointerException Java Basics - Anfänger-Themen 3
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Array wird nicht übernommen NullPointerException Java Basics - Anfänger-Themen 6
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben