OOP Auf JPanel zugreifen, das einem JTabbePane hinzugefügt worden ist

Sin137

Mitglied
Hallo Community,

meine Fragestellung ist eigentlich schon in der Beschreibung erklärt.
Ich habe ein Panel auf dem ein JTabbedPane liegt. Ich füge nun ein Tab hinzu, das ein JPanel mit bringt. Sprich ich habe dem Tab mittels des add-Befehls ein JPanel hinzugefügt (auf dem eine Tabelle enthalten ist). Nun will ich an das Objekt des JPanels ran, da ich dort Informationen hinterlegt habe.

Beim Versuch über den Tab auf das Panel zuzugreifen bekomme ich lediglich eine NullPointerException.

Java:
int x = btn.getMainFrame().getQueryView().getTP().getSelectedIndex();
((TablePanel)btn.getMainFrame().getQueryView().getTP().getTabComponentAt(x)) //hier wird eine Methode aufgerufen die in der Klasse des Panels exiisitert

Wie schon geschildert, bekomme ich lediglich eine NullPointerException.
 
Solle Methodenketten sind sehr unschön und erschweren auch die Fehlersuche.
Der StackTrace zeigt dir zwar die richtige Zeile an, aber er sagt nicht genau welche Aufruf in dieser Zeile nun "null" geliefert hat.

Zerlege diese Zeile und finde erstmal heraus wo wirklich die NullPointer Auftritt, welches Objekt versuchst du an dieser Stelle zu bekommen?
 
Auf die Idee bin ich auch schon gekommen. Hätte ich vll erwähnnen sollen. Bis zum getTabComponentAt(x) klappt es. Also ich bekomme da etwas zurück, das auch in ein TablePanel gecastet wird. Aber der Aufruf danach wirft dann die Exception.

Wie kann man so eine Kette anders aufbauen?
Ich hab ja viele Klassen und ich kann ja nicht immer alles miteinander verbunden haben. Das ist glaub ich auch nicht der Sinn von OOP.
 
Bis zum getTabComponentAt(x) klappt es. Also ich bekomme da etwas zurück, das auch in ein TablePanel gecastet wird. Aber der Aufruf danach wirft dann die Exception

Dann ist dein Code oben nicht vollständig.
Nach dem Cast (der laut deiner Aussage funktioniert) enthält die Zeile nichts mehr. Welchen Aufruf meinst du da?
So wie das beschrieben ist, würde ich meinen der Cast liefert "null" zurück.

Du musst halt genau raussuchen wo das "null" herkommt. Und dann überlegen warum dort "null" und nicht etwas anderes kommt.
Mehr kann man da aktuell nicht dazu sagen 😉
 
Naja ich ruf halt eine Methode auf, die in der Klasse von dem Panel hinterlegt wurde, wie ich als Kommentar schon dazu geschrieben habe.

Wenn ich also auf das Panel zugreifen will, dann müsste das ja "null" sein. Ich will praktisch auf einem Panel, eine Methode aufrufen, aber das Objekt ist leer. Das sagt die Exception mir aus.
Die Frage stellt sich mir warum ist das null. Das Objekt wurde ja erzeugt, und wird angezeigt. Ich bin mir auch unsicher ob der Weg über "getTabComponentAt(x)" der richtige Weg ist, um an das Panel zu gelangen.
 
Warum merkst du dir das Panel nicht einfach in einer Instanzen-Variablen? Ich finde dieses "Ich suche mal durch die Views und sehe was ich finde" immer sehr unschönen Code.

Gruß

Claus
 
@Thallius Ich kann es nicht in einer Instanz-Variabel mir merken, da ich nicht weiß wie viele davon erstellt werden. Ich handhabe es derzeit so, dass wenn ich auf meinen Button "hinzufüge" klicke ein neuer Pane erzeugt wird. Dazu erzeuge ich im ActionListener das Panel-Objekt und füge es dem JTabbedPane hinzu. Ich will jetzt auf das Pane zugreifen und mir dieses Objekt eben wieder holen. Dabei passiert meiner Meinung der Fehler. Vielleicht findet er das Objekt nicht oder dieses Wurde von der GC gelöscht.

@JStein52 Es ist eine GetterMethode, die auf das Objekt zugreifen soll, da ich dort etwas abspeichere.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at de.jonathan_puxler.controller.query.QueryController.generateSQLQuery(QueryController.java:80)
at de.jonathan_puxler.controller.query.QueryBTNController.actionPerformed(QueryBTNController.java:63)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 
Ist die Methode "generateSQLQuery" die in der die Zeile da oben steht ? Kannst du die Zeile nicht mal aufteilen und gucken ob du denn überhaupt das richtige Panel von getTabComponentAt(x) zurückkriegst ? Oder hast du das schon nachgeschaut ?
 
@Thallius es kann ja wirklich so einfach sein ^^. Eine ArrayList an die richtige Stelle gesetzt noch ein zwei Parameter dazu und fertig. ^^ Danke für den Denkanstoß.

@JStein52 Da dein Vorgänger ein guten Lösungsansatz geliefert hat, habe ich dies jetzt garnicht ausprobiert. Trotzdem bedanke ich mir für eure Unterstützung.
 

Neue Themen


Zurück
Oben