Konstruktor wird nicht als erstes aufgerufen!

Status
Nicht offen für weitere Antworten.

CarloC

Bekanntes Mitglied
Hallo zusammen,

mich würde interessieren warum bei meiner Subklasse (siehe unten) zuerst "btnLoeschen", anstatt der print im Konstruktor ausgegeben wird. Der print im Konstruktor wird auch erst aufgerufen wenn ich auf einen Button klicke. Müsste der normal nicht direkt beim erzeugen des Objekts aufgerufen werden?

Ich hatte zuerst das Problem, dass ich die Variablen "zeile", "daten" usw. nicht in der actionPerformed Methode zur Verfügung hatte (NullPointException). Ich denke das hängt auch damit zusammen, dass der Konstrutor das "this.zeile = zeile;" etc. erst am Ende macht.

Wo ist mein Denkfehler?

Danke für die Hilfe.

Superklasse: Loeschen
Code:
public class Loeschen extends JDialog implements ActionListener
{
	private Container c;
	private JFrame owner;
	private JLabel lblMeldung;
	private JPanel pnlMeldung, pnlButtons;
	protected JButton btnLoeschen, btnAbbrechen;
	private Stplweb stplweb;

	public Loeschen(JFrame owner)
	{
		super(owner, "OrgEinheit löschen", true);

		this.owner = owner;

		this.setSize(350, 120);
		this.setResizable(false);

		c = getContentPane();
		c.setLayout(new GridLayout(3,1));

		lblMeldung = new JLabel("Wollen sie die Organisationseinheit wirklich löschen?");
		lblMeldung.setSize(300,20);
		lblMeldung.setLocation(20,40);

		btnLoeschen = new JButton("OK");
		btnLoeschen.setSize(100,20);
		btnLoeschen.addActionListener(this);

		btnAbbrechen = new JButton("Abbrechen");
		btnAbbrechen.setSize(100,20);
		btnAbbrechen.addActionListener(this);

		pnlButtons = new JPanel();
		pnlButtons.setLocation(70,80);
		pnlButtons.add(btnLoeschen);
		pnlButtons.add(btnAbbrechen);

		c.add(lblMeldung);
		c.add(pnlButtons);

		this.setVisible(true);
	}

	public void actionPerformed(ActionEvent arg0)
	{
		//
	}
}

SubKlasse: GliederungsEinheitLoeschen
Code:
public class GliederungsEinheitLoeschen extends Loeschen
{
	private GliederungsplanModel model;
	private int zeile;
	private Vector daten;
	
	public GliederungsEinheitLoeschen(JFrame owner, GliederungsplanModel model, int zeile, Vector daten)
	{
		super(owner);

		this.model = model;
		this.zeile = zeile;
		this.daten = daten;
		
		System.out.println("Konstruktor");
	}

	public void actionPerformed(ActionEvent arg0)
	{
		Object aktion = arg0.getSource();

		if (aktion == btnLoeschen)
		{
			System.out.println("btnLoeschen");

			this.setVisible(false);
			this.dispose();
		}

		if (aktion == btnAbbrechen)
		{
			this.setVisible(false);
			this.dispose();
		}
	}
}

Ausgabe:
btnLoeschen
Konstruktor
 

Wildcard

Top Contributor
Hört sich seltsam an. Setz mal einen Breakpoint in die actionPerformed, und schau nach wer die Methode aufgerufen hat.
 

AlArenal

Top Contributor
patr1k hat gesagt.:
Der print im Konstruktor wird auch erst aufgerufen wenn ich auf einen Button klicke. Müsste der normal nicht direkt beim erzeugen des Objekts aufgerufen werden?

Aus deinem geposteten Code ist nicht ersichtlich wo du denn eine Instanz von GliederungsEinheitLoeschen erstellst. Wenn du das erst in Loeschen#actionPerformed machst, werden (so vermute ich mal) der Konstruktor von GliederungsEinheitLoeschen und dessen #actionPerformed unmittelbar hintereinander aufgerufen. Ich kann dir nicht sagen warum, aber manchmal kommts vor, dass bei Ausgabe über System.out Sachen vertauscht werden.

Ich selbst habs aber schon länger nicht mehr beobachtet, da ich meist noch mit Loggern arbeite.

ALlein der Gedanke, der Konstruktor würde NICHT als erstes aufgerufen, ist aber völlig abwegig ;)
 

SnooP

Top Contributor
ich würde das auch nochmal genauer debuggen - mit einigen Breakpoints an den relevanten stellen, dann kann man den Verlauf evtl. besser verfolgen...
 

CarloC

Bekanntes Mitglied
Ich werde das jetzt mal mit dem Debugger unter die Lupe nehmen.

Aber nochmal eine Verständnisfrage: Wenn ich von der Klasse ein Objekt erzeuge, muss dann normalerweise nicht der System.out.println("Konstruktor") ausgeführt bzw. ausgegeben werden?

Das passiert nämlich erst wenn ich auf einen Button klicke und nicht in dem Moment wo ich das Objekt erzeuge.

EDIT: Also wenn ich mal die ganzen anderen Sachen aus der Klasse rausnehme und auch nicht mehr von der Superklasse erbe, dann gibt er "Konstruktor" direkt beim erzeugen aus.
 

AlArenal

Top Contributor
Ich wiederhole mich, aber:

In obigem Code ist nicht ersichtlich, wo du eine Instanz erzeugst. Was sollen wir also antworten?
 

CarloC

Bekanntes Mitglied
Sorry, also die Instanz erzeuge ich in der Klasse, in der sich mein JTable befindet:

Code:
	public void mouseClicked(MouseEvent arg0)
	{

		Point point = arg0.getPoint();

		int zeile = table.rowAtPoint(point);
		int spalte = table.columnAtPoint(point);

		if (spalte == 0)
		{
			GliederungsEinheitLoeschen gliederungsEinheitLoeschen = new GliederungsEinheitLoeschen(frame, model, zeile, daten);
		}
	}

Wenn jemand auf die erste Spalte der Tabelle klickt (dort befindet sich ein Lösch-Icon) geht der Dialog auf (GliederungsEinheitLoeschen). Dieser erbt bekanntlich von der Klasse Loeschen.

Ich habe jetzt nochmal was getestet: Wenn ich in meiner Subklasse nicht mehr von der Superklasse erbe und somit auch den super() Aufruf rausnehme, wird "Kontruktor" ausgegeben sobald jemand auf die erste Spalte klickt bzw. das Objekt erzeugt wird. Ich denke es hängt irgendwie mit dem super() Aufruf zusammen. Anscheinend führt er danach ja nicht mehr den Rest des Konstruktors aus. ???:L
 

Murray

Top Contributor
Und wenn Du solche Ausgaben verwendest, um festzustellen, wann das Programm welchen Code durchläuft, dann ist es ratsam, hinter das System.out.println noch ein System.out.flush zu setzen.
 

CarloC

Bekanntes Mitglied
Okay, danke.

Ich habe jetzt gefunden woran es liegt. Im Konstruktor der Superklasse schreibe ich ja nochmal:

Code:
super(owner, "OrgEinheit löschen", true);

Anscheinend geht das nicht. Wenn das dort steht führt er nämlich nicht mehr den Konstruktor der Subklasse weiter aus.

Kann mir einer sagen warum man das so nicht machen kann? Ich weiß jetzt nicht wie ich sonst den owner angeben soll...
 
S

SlaterB

Gast
wieso denkst du, dass es was mit dem super-Konstruktor zu tun hat?

durch setzten von weiteren System.out.println siehts bei mir jedenfalls sehr deutlich danach aus, dass alles bis zum
'this.setVisible(true); '
ausgeführt wird, alles danach aber nicht mehr,

das Problem ist damit zwar auch weiterhin mysterös, aber relativ einfach zu umgehen,

this.setVisible(true); muss aus dem Konstruktor raus und separat gerufen werden, oder eben am Ende des Konstruktors der Sub-Klasse

this.setVisible(true); sollte sowieso generell nicht im Konstruktor gerufen werden,
vielleicht wird die Anzeige der Subklasse ja erst noch im folgenden Konstruktor der Sub-Klasse festgelegt?

dass es zu so einem Fehler kommt ist mir unverständlich, aber es ist doch offensichtlich generell nicht ratsam in der Oberklasse schon auf visible zu stellen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
J Objekt konstruktor wird nicht aufgerufen Java Basics - Anfänger-Themen 11
D Zweiter Konstruktor der Unterklasse wird nicht angenommen Java Basics - Anfänger-Themen 10
B Konstruktor namen wird nicht erkannt Java Basics - Anfänger-Themen 9
A Konstruktor wird nicht erkannt Java Basics - Anfänger-Themen 2
T Vorschreiben, dass Konstruktor überschrieben wird Java Basics - Anfänger-Themen 10
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
G Konstruktor und update Java Basics - Anfänger-Themen 4
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
E Konstruktor mit Methode Java Basics - Anfänger-Themen 7
E ArithmeticException im Konstruktor Java Basics - Anfänger-Themen 4
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
F Konstruktor richtig implementiert? Frage zu Benutzereingaben... Java Basics - Anfänger-Themen 9
W Typecastin im Konstruktor? Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
F Arrays im Konstruktor Java Basics - Anfänger-Themen 5
C Konstruktor mit und ohne Parameterliste Java Basics - Anfänger-Themen 13
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
E Plausibilitätsprüfung in dem Konstruktor mit Ausnahmebehandlung Java Basics - Anfänger-Themen 8
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P Counter im Konstruktor Java Basics - Anfänger-Themen 11
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Datentypen Warum mit Konstruktor Objektvariablen initalisieren? Java Basics - Anfänger-Themen 19
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
P Konstruktor. Java Basics - Anfänger-Themen 4
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
D Objekt oder Konstruktor Java Basics - Anfänger-Themen 2
F Java default Konstruktor Java Basics - Anfänger-Themen 1
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
T Konstruktor mit Referenzdatentypen Java Basics - Anfänger-Themen 5
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
R ArrayList im Konstruktor. Java Basics - Anfänger-Themen 4
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
B Konstruktor Problem Java Basics - Anfänger-Themen 8
Joew0815 konstruktor und damit erstellte objekte Java Basics - Anfänger-Themen 1
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
O Konstruktor und Default Konstruktor Java Basics - Anfänger-Themen 7
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
I Vererbung Frage zum Konstruktor Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
P Konstruktor Java Basics - Anfänger-Themen 4
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben