2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
2729
2729
EMPFEHLEN
-
14.10.10 17:54 #1
- Registriert seit
- Oct 2010
- Beiträge
- 4
Dies ist vermutlich eine Standardfrage, ich habe allerdings nirgendwo im Netz eine weiterhelfende Antwort gefunden. Vielleicht kann mir hier ein netter Mensch weiter helfen.
Ich habe das unten stehende (einfache) Testprogramm geschrieben, bei dem nichts weiter passieren soll, als dass im TestField "TestF" (das eigentlich nichts anderes als ein JTextField ist) ein Text erscheint. Allerdings wird "TestF" nicht der public static void main - Methode erzeugt, sondern durch das AnzeigePanel (das nicht viel mehr als ein JPanel) "AusgabePanel" ("AusgabePanel" wird in der main-Methode erzeugt).
Beim Ausführen vongibt es die "Exception in thread "main" java.lang.NullPointerException" - Fehlermeldung.Code :1
AusgabePanel.TestF.putData();
So wie ich es verstehe, ist also das "TestF"-Objekt noch gar nicht erzeugt oder der Pointer der "TestF"-Variablen zeigt noch nicht auf das Objekt (das aber schon da ist), deshalb kann die Methode des Objekts nicht ausgeführt werden.
Kann mir jemand helfen? Die Einbettung des "TestF"-Objekts in das "AusgabePanel"-Objekt ist beabsichtigt. Gibt es einen eleganten Weg da raus?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class Test{ public static void main ( String[] args ) { JFrame AusgabeFrame = new JFrame(); AusgabeFrame.setBounds(0,0,500,500); AnzeigePanel AusgabePanel = new AnzeigePanel(); AusgabeFrame.getContentPane().add(AusgabePanel); AusgabePanel.TestF.putData(); AusgabeFrame.setVisible(true); } } interface AnzeigeInt { void putData(); } class AnzeigePanel extends JPanel implements AnzeigeInt { TestField TestF; AnzeigePanel() { super(); JLabel TestLabel = new JLabel("Test"); add(TestLabel); TestField TestF = new TestField(); add(TestF); } public void putData(){ TestF.putData(); } } class TestField extends JTextField implements AnzeigeInt { TestField() { super(); } public void putData(){ setText("Hello World"); } }
-
Hallo,
Das einfachste wär, dass TestF im AusgabePanel nicht instanziert wurde.
Also schau dir bitte nochmal an, ob du auch wirklich das Attribut TestF neu instanziert hast:
und nicht ein anderes TestF:Code java:1
testF = new TestF();
Übrigens: Attribute beginnen in Java für gewöhnlich mit einem Kleinbuchstaben zwecks Übersicht.. Ich hab's in meinem Beispiel mal angepasst (Beginn mit Kleinbuchstabe = Attribut; Beginn mit Großbuchstabe = Klasse).Code java:1
TestF testF = new TestF();
Gruß,
Martin
-
15.10.10 08:41 #3
- Registriert seit
- Oct 2010
- Beiträge
- 4
Super, vielen Dank. Das war wirklich ein blöder Anfängerfehler

Wenn ich also in einer Klasse am Anfang eine Variable / ein Attribut deklariere, also in diesem Fall ein TestField mit Namen "testF", dann muss ich es im constructor mit
instanzieren (oder "instantieren", wie schreibt man das auf Deutsch?Code :1
testF = new TestField();
), damit eine andere Methode, die diesen Bezeichner (also "testF") verwendet, auch auf das Objekt zurückgreifen kann.
Wenn ich mit
instanziere, dann wurde zu dem am Anfang der Klasse öffentlich deklarierten "testF" kein Objekt erzeugt (auf das "testF" zeigt), deshalb die "NullPointerException". Im Constructor von TestField wird dann eine neue Variable "testF" erzeugt (die auf das passende Objekt zeigt), auf die aber keine andere Methode zugreifen kann, weil diese Variable lokal ist.Code :1
TestField testF = new TestField();
Hab ich das richtig verstanden?
-
15.10.10 08:59 #4
Moin,
also ... ich hab's nicht verstanden
Um es nochmal deutlich zu formulieren :
mit
wird an der Stelle des Aufrufs ein neues Objekt von Typ "TestField" mit dem Bezeichner "testF" erzeugt !Code java:1
TestField testF = new TestField();
mit
wird an der Stelle 'lediglich' ein Objekt instantiiert (ich denke, man schreibt es SO !!Code java:1
testF = new TestField();
), das an anderer Stelle mit
deklariert worden ist !!Code java:1
TestField testF = null;
Du musst drauf achten, dass Du immer das richtige Objekt im Zugriff hast! Ggf. kann es bspw. auch Methoden übergeben oder von Methoden zurückgegeben werden !
Gruß
KlausGeändert von vfl_freak (15.10.10 um 09:01 Uhr)
Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
Ich denk, du hast's richtig verstanden, ja.. aber wurd ja grad nochmal schön erklärt.
Ansonsten noch ein Hinweis.. Es ist üblich, den Attributen einer Klasse nur privaten Zugang zu geben
und dann (öffentliche) Setter und Getter-Methoden zu schreiben.Code java:1
private TestF testF;
Code java:1 2 3 4 5 6
public TestF getTestF() { return testF; } public void setTestF(TestF testF) { this.testF = testF; }
Gruß,
Martin
-
15.10.10 15:31 #6
- Registriert seit
- Oct 2010
- Beiträge
- 4
Danke, eure Erläuterungen haben mir noch mal geholfen, dass das Ganze in meinem Kopf noch klarer wird. Ich scheine es tatsächlich richtig verstanden zu haben.

Eine Sache ist mir allerdings noch nicht völlig klar: Gibt es einen subtilen Unterschied zwischen "ein Objekt erzeugen" und "ein Objekt instantiieren"? Oder ist "instantiieren" "nur" Fachsprache für "erzeugen"?
-
15.10.10 15:54 #7
Moin,
hmm, "erzeugen" finde schwammig, weil es nichts sagt ....
Code java:
Erst nach dem Instantiieren ist IMHO wirklich der benötigte Speicher reserviert worden ...
tschüss
KlausEs ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
16.10.10 09:57 #8
- Registriert seit
- Oct 2010
- Beiträge
- 4
Danke! Das beruhigt, ich habe es also nicht völlig falsch verstanden.
Ähnliche Themen
-
Programmcodefehler mit Exception in thread "main" java.lang.NullPointerException
Von IcocaI im Forum Java GrundlagenAntworten: 8Letzter Beitrag: 07.01.09, 14:24 -
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number
Von senay im Forum JavaAntworten: 16Letzter Beitrag: 14.08.07, 23:56 -
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/jdic/tray
Von vaporizer im Forum JavaAntworten: 2Letzter Beitrag: 16.01.07, 15:50 -
Exception in thread "main" java.lang.NoClassDefFoundError:
Von MADDilli16 im Forum JavaAntworten: 1Letzter Beitrag: 29.07.05, 14:41 -
Problem beim Ausführen eines Java-Programms: Exception in thread "main" java.lang.No
Von lindin im Forum JavaAntworten: 2Letzter Beitrag: 28.09.04, 10:02





Zitieren

Login





