Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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]

    }

}

Geschrieben

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."

Geschrieben (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 von Schiller256

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...