NullPointerException

Objektorientierte Programmiersprache auf Basis einer virtuellen Maschine (https://www.oracle.com/java/)
Antworten
MoonGuy
Beiträge: 231
Registriert: Fr Okt 08, 2010 2:49 pm

NullPointerException

Beitrag von MoonGuy » Mi Mai 04, 2011 3:42 pm

Hmhm, ich dachte in Java würde mir das nie passieren, aber ich muss für eine Hausaufgabe ein Malprogramm schreiben und die Knöpfe zum auswählen von den verschiedenen Malmethoden sollen wir mit Vierrecken und Text darin selbst zeichnen. Also habe ich mir in Java eine Klasse geschrieben namens Knopf:

Code: Alles auswählen

// Knopf Klasse
public class Knopf
{
    Rectangle rect = new Rectangle(); // Umrandung als Rechteck
    String text = new String(); // Inhalt als String
    int textX, textY; // Position des Strings
}
Soweit so gut. Ich habe in meiner Hauptklasse dann ein Array erstellt für die Knöpfe und im Konstruktor folgendes geschrieben:

Code: Alles auswählen

        // Knoepfe festlegen
        this.knopf = new Knopf[5];

        this.knopf[0].rect.x = 20;
        this.knopf[0].text = "R"; // Rechteck
        this.knopf[0].textX = 25;
        this.knopf[1].rect.x = 45;
        this.knopf[1].text = "K"; // Kreis
        this.knopf[1].textX = 50;
        this.knopf[2].rect.x = 70;
        this.knopf[2].text = "D"; // Dreieck
        this.knopf[2].textX = 75;
        this.knopf[3].rect.x = 95;
        this.knopf[3].text = "T"; // Text
        this.knopf[3].textX = 100;
        this.knopf[4].rect.x = 120;
        this.knopf[4].text = "P"; // Polylinie
        this.knopf[4].textX = 125;
        for( int i = 0; i < knopf.length; i++ )
        {
            knopf[i].textY = 40;
            knopf[i].rect.y = 40;
            knopf[i].rect.height = 20;
            knopf[i].rect.width = 20;
        }
Bei Zeile 60, dass ist "this.knopf[0].rect.x = 20;" gibt er mir die Exception. Hat jemand eine Ahnung, woran es liegen kann?

Danke im Vorraus...

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: NullPointerException

Beitrag von cloidnerux » Mi Mai 04, 2011 4:15 pm

Ich weiß ja nicht ob das in java anderst ist, aber ich denke, das du bei diesem Aufruf:

Code: Alles auswählen

this.knopf = new Knopf[5];
Die Objekte nicht anlegst, du also nur einen Array mit 5 Pointer zu Klassen, die nicht Exsitieren.
Du solltest dementsprechend evt mit

Code: Alles auswählen

this.knopf[0] = new Knopf(...)
Die Objekte anlegen.

Keine Gewähr auf die Angaben, habe selber nie Java programmiert.
Redundanz macht wiederholen unnötig.
quod erat expectandum

MoonGuy
Beiträge: 231
Registriert: Fr Okt 08, 2010 2:49 pm

Re: NullPointerException

Beitrag von MoonGuy » Mi Mai 04, 2011 4:24 pm

cloidnerux hat geschrieben:Ich weiß ja nicht ob das in java anderst ist, aber ich denke, das du bei diesem Aufruf:

Code: Alles auswählen

this.knopf = new Knopf[5];
Die Objekte nicht anlegst, du also nur einen Array mit 5 Pointer zu Klassen, die nicht Exsitieren.
Du solltest dementsprechend evt mit

Code: Alles auswählen

this.knopf[0] = new Knopf(...)
Die Objekte anlegen.

Keine Gewähr auf die Angaben, habe selber nie Java programmiert.

Ah, danke^^
Jo, so klappt es. Vielen Dank

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: NullPointerException

Beitrag von Dirty Oerti » Mi Mai 04, 2011 4:29 pm

Ja, die Objekte muss man natürlich auch anlegen, nicht nur das Array ;)

Eine andere Sache:
In deiner Klasse solltest du am besten die einzelnen Attribute noch (in diesem Fall wohl) mit public deutlich als öffentlich zugängliche Attribute deklarieren :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

MoonGuy
Beiträge: 231
Registriert: Fr Okt 08, 2010 2:49 pm

Re: NullPointerException

Beitrag von MoonGuy » Mi Mai 04, 2011 4:34 pm

Dirty Oerti hat geschrieben:Ja, die Objekte muss man natürlich auch anlegen, nicht nur das Array ;)

Eine andere Sache:
In deiner Klasse solltest du am besten die einzelnen Attribute noch (in diesem Fall wohl) mit public deutlich als öffentlich zugängliche Attribute deklarieren :)
Ui, ja du hast Recht. Das zeugt daher, dass ich diese Klasse erst innerhalb meiner Hauptklasse hatte, da war es noch private. Da ich aber dachte, der Fehler zeuge daher, habe ich das einfach kopiert und deshalb sieht das noch so aus^^

Soweit ich weiß ist aber ohne access modifier das ganze sogar private, aber innerhalb von Paketen und inneren Klassen erreichbar... kA so genau^^

Antworten