Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

bluej

Empfohlene Antworten

Veröffentlicht

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

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

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]

    }

}

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.