Detlef777 Geschrieben 29. Mai 2009 Geschrieben 29. Mai 2009 Hallo, bei uns in der Schule lernt man BlueJ und wir müssen jetzt am Ende des Schuljahres ein Projekt programmieren und ich erhalt folgende Meldung wenn ich ein Objekt erzeugen will. java.lang.NullPointerException at java.awt.Container.addImpl(Container.java:1010) at java.awt.Container.add(Container.java:348) at ZEICHENFENSTER.komponenteHinzufuegen(ZEICHENFENSTER.java:600) at PETRUS.<init>(PETRUS.java:34) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at bluej.runtime.ExecServer$3.run(ExecServer.java:814) java.lang.NullPointerException at java.awt.Container.addImpl(Container.java:1010) at java.awt.Container.add(Container.java:348) at ZEICHENFENSTER.komponenteHinzufuegen(ZEICHENFENSTER.java:600) at PETRUS.<init>(PETRUS.java:26) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at bluej.runtime.ExecServer$3.run(ExecServer.java:814) java.lang.NullPointerException at java.awt.Container.addImpl(Container.java:1010) at java.awt.Container.add(Container.java:348) at ZEICHENFENSTER.komponenteHinzufuegen(ZEICHENFENSTER.java:600) at PETRUS.<init>(PETRUS.java:27) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at bluej.runtime.ExecServer$3.run(ExecServer.java:814) java.lang.NullPointerException at java.awt.Container.addImpl(Container.java:1010) at java.awt.Container.add(Container.java:348) at ZEICHENFENSTER.komponenteHinzufuegen(ZEICHENFENSTER.java:600) at PETRUS.<init>(PETRUS.java:27) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at bluej.runtime.ExecServer$3.run(ExecServer.java:814) Ich weiß überhaupt nicht was das heißen soll und hoffe, dass es mir jemand so erklären kann dass es auch ein Schüler (10.Klasse) versteht. Falls man noch was braucht aus dem Programm, einfach sagen ich weiß nich was man da alles posten sollte. MfG Detlef Zitieren
Schiller256 Geschrieben 29. Mai 2009 Geschrieben 29. Mai 2009 Eine NullPointerException(NPE) fliegt immer dann wenn du versucht auf ein Objekt zuzugreifen was null ist. Du musst erst eine Instanz von deiner Klasse (ein Objekt) erzeugen und kannst dann darauf zugreifen. In Java könnte es so aussehen. //so nicht Klasse objektA = null; objektA.machWas(); //hier fliegt die NPE //so sollte es sein Klasse objektB = new Klasse(); objektB.machWas(); Zitieren
Detlef777 Geschrieben 29. Mai 2009 Autor Geschrieben 29. Mai 2009 Hab ein paar Sachen aus dem Programm rauskopiert. Beim unterstrichenen kommt die Meldung aber ich find meinen Fehler nicht. Noch ne andere Frage,wenn ich wie unten zum Beispiel bei "public XX(string titel)" etwas für Titel eingeben muss, was kann ich da zum Beispiel eingeben weil Zahl und Wörter nimmt er nicht. public class XX { [B]private YY a;[/B] private static XX b; ... public XX(String titel) ... public XX(String titel, int breite, int hoehe) ... private XX(String titel, int breite, int hoehe) { [B]a = new YY();[/B] } public void c(JComponent element, String position) { [B][U]a.add(element);[/U][/B] } } Zitieren
frquadrat Geschrieben 30. Mai 2009 Geschrieben 30. Mai 2009 Hallo, Da Du die anderen Konstruktoren der Klasse XX nicht ausgeschrieben hast, vermute ich, dass das Feld "a" dort nicht initialisiert wird. Mein Vorschlag: Markiere das Feld "a" als final, dadurch wirst Du gezwungen, es in allen Konstruktoren der Klasse XX zu initialisieren. private final YY a; Das wird vermutlich zu Compilefehlern führen, geh die Fehler einzeln durch. Sollte sich "a" nie ändern (d.h. es ist immer dieselbe Instanz der Klasse YY, und die wird hier nie ersetzt, dann kannst Du das final auch so beibehalten. Das ist natürlich jetzt eine etwas seltsame Vorgehensweise; Normalerweise meckert eine Entwicklungsumgebung mit entsprechenden Warnungen, z.B. "private field 'a' might not have been initialized." Zitieren
Schiller256 Geschrieben 30. Mai 2009 Geschrieben 30. Mai 2009 (bearbeitet) Dein Code kann eigentlich überhaupt nicht kompiliert werden denn du müsstest eine Duplicate method XX bekommen. Denn dein Konstruktor ist einmal als public und auch nochmal als private deklariert damit kann Java nichts anfangen. Entweder initialisierst du eine Attribute im Konstruktor oder in den entsprechenden Methode wo du etwas setzen willst kommt noch eine zusätzliche Abfrage mit rein. public class XX { private YY a; public XX(String titel) { this(titel, 0, 0); } //Attribut a im Konstruktor initialisieren public XX(String titel, int breite, int hoehe) { this.a = new YY(); //.... restlicher Code } // entweder public oder private //private XX(String titel, int breite, int hoehe) //{ // a = new YY(); // } // Attribut a in der Methode initialisieren public void c(JComponent element, String position) { if (this.a == null) { this.a = new YY(); } a.add(element); } } Bearbeitet 30. Mai 2009 von Schiller256 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.