Dynamische Methode aus anderer Klasse aufrufen

MarDaiBre

Aktives Mitglied
Hallo,

undzwar bin ich gerade an einem Projekt mit Anbindung an eine MS Access Datenbank dran. Ich habe bisher sehr unsauber gearbeitet (alle Methoden in einer Klasse, also nicht nach MVC), da ich erstmal schnelle sichtbare Ergebnisse erzielen wollte. Nun möchte ich in einer Klasse eine Methode einer anderen Klasse aufrufen. Diese methode soll mir eine SELECT-Anweisung aus der MS Access Datebank ausführen und eine neue Tabelle in einem neuen Frame erstellen.

Ich habe schon im Netz gefunden, dass dies entweder mit static machbar ist. Dort erweitert er mir jedoch immer nur die Tabelle und erstellt keine neue Tabelle nach jedem Methodenaufruf. Mit invoke habe ich es auch schon probiert, bin aber auch da gescheitert, da (ich habe mehrere Methoden, u.a. auch welche, die einen return-Wert besitzen) die invoke-Zeile immer fehlerhaft war.

Hier mal Klasse 1, wo die Methode aufgerufen werden soll:
Java:
else if(source == quadrantB)
{    
    query = "Select * from Quadrant";
    text = "Quadranten";
            
    setCursor(new Cursor(Cursor.WAIT_CURSOR));
    verbindeDB(text, query);
    infoTextL.setText("Erfolgreich | Abruf der Quadranten aus Datenbank.");
    setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

Hier Klasse 2, wo die Methode enthalten ist:
Java:
public class DBConnection
{
     private void verbindeDB(String text, String query)
    {
         String db;
         String path;
        
         Connection con;
         Statement st;
         ResultSet rs;
        
        Vector columnNames = new Vector();
                Vector data = new Vector();
        
        
                try
                {
                    path = "H:/P2/Import/Lackbeschädigungen TEST.mdb";
            db =  "jdbc:ucanaccess://" + path;
            
                        con = DriverManager.getConnection(db);
            
                        st = con.createStatement();
                        rs = st.executeQuery(query);
                        ResultSetMetaData md = rs.getMetaData();
            
                        int columns = md.getColumnCount();
            
                       //  Spaltennamen ermitteln
                       for (int i = 1; i <= columns; i++)
                       {
                                String colname = md.getColumnName(i);
                                colname = changeColumnName(colname);
                                columnNames.addElement(colname);
                       }
            
                       //  Zeileninhalt ermitteln
                       while (rs.next())
                      {
                              Vector row = new Vector(columns);
                
                              for (int i = 1; i <= columns; i++)
                                   row.addElement(rs.getObject(i));

                             data.addElement(row);
                      }
            
                      rs.close();
                      st.close();
                      con.close();
                }
        
               catch(Exception e)
               {
                      e.printStackTrace();
               }
        
                //  Tabelle erzeugen
                JTable table = new JTable(data, columnNames){
            @Override
                     public boolean isCellEditable(int row, int column)
                     {
                      return false;
                      }
                  };
        
                table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                Tabellenanpassung tca = new Tabellenanpassung(table);
                tca.anpassungAllerSpalten();
        
                JFrame frame = new JFrame (text);
                JScrollPane pane = new JScrollPane(table);
        
                frame.add(pane);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
     }
}

Bisher waren Aufruf und Methode in einer Klasse, möchte aber dies nun trennen, da ich alle DB-Methoden in einer separaten Klasse haben möchte. Kann mir da für den Aufruf jmd helfen, wie der Aufruf in Klasse 1 aussehen muss?

Vielen Dank schonmal!
 
Zuletzt bearbeitet von einem Moderator:

osion

Bekanntes Mitglied
Es sieht so aus, als würdest du nur den String zum JFrame weiterleiten, aber mit dem neuen JTable machst du nichts?
 

MarDaiBre

Aktives Mitglied
Hey,

doch, die Methode bekommt ja die beiden Strings "text" (für die Frameüberschrift) und "query" also die SELECT-Abfrage übergeben. Dann soll die Methode halt die SELECT-Abfrage durchführen, die Tabelle bauen und ein neues JFrame erstellen. Das funktioniert auch alles aber halt nur in einer gemeinsamen Klasse. Möchte nun die Methode in einer anderen Klasse mit anderen datenbankbasierenden Methoden speichern, sodass ich nur einmal den Pfad zu DB nennen muss und nicht wie bisher in jeder Methode / in jeder Klasse, welche eine DB-Verbindung benötigt.
 

Thallius

Top Contributor
Dir ist aber schon klar, dass Du eine Instanz der Klasse DBConnection erzeugen must wenn Du eine Ihrer Methoden benutzen willst oder?
Weiterhin wirst du wohl keine eine private Methode einer Klasse von einer anderen Klasse aus benutzen können.

Mir scheint Du hast noch so gar keine Ahnung von den Grundlagen, wirbelst aber schon irgendwie mit Datenbanken etc rum. Sorry aber fang doch erstmal mit was kleinem an.

Gruß

Claus
 
Zuletzt bearbeitet:

MarDaiBre

Aktives Mitglied
Hi Thallius,

danke für den Tipp mit Instanzieren von DBConnection (heißt jetzt Datenbankschnittstelle), der hat mich auf die richtige Spur gebracht. Nun hat sich aber ein neuer Fehler eingeschlichen.

Ich habe nun wiefolgt den Code modifiziert:
Java:
private Datenbankschnittstelle db;

...

else if(source == quadrantB)
{	
	query = "Select * from Quadrant";
	text = "Quadranten";
	        
	setCursor(new Cursor(Cursor.WAIT_CURSOR));
	db.getTabellen(text, query);
	infoTextL.setText("Erfolgreich | Abruf der Quadranten aus Datenbank.");
	setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}

Und die Methode nun in die folgende Klasse gepackt:
Java:
public class Datenbankschnittstelle
{
     public void getTabellen(String text, String query)
    {
		String db;
		String path;
		
		Connection con;
		Statement st;
		ResultSet rs;
		
		Vector<String> columnNames = new Vector<String>();
                Vector<Vector<Object>> data = new Vector<Vector<Object>>();
        
        
        try
        {
        	path = "H:/P2/Import/Lackbeschädigungen TEST.mdb";
		db =  "jdbc:ucanaccess://" + path;
        	
            con = DriverManager.getConnection(db);
            
            st = con.createStatement();
            rs = st.executeQuery(query);
            ResultSetMetaData md = rs.getMetaData();
            
            int columns = md.getColumnCount();
            
            //  Spaltennamen ermitteln
            for (int i = 1; i <= columns; i++)
            {
                String colname = md.getColumnName(i);
                colname = Spaltennamen.changeColumnName(colname);
                columnNames.addElement(colname);
            }
            
            //  Zeileninhalt ermitteln
            while (rs.next())
            {
            	Vector<Object> row = new Vector<Object>(columns);
                
            	for (int i = 1; i <= columns; i++)
                    row.addElement(rs.getObject(i));

                data.addElement(row);
            }
            
            rs.close();
            st.close();
            con.close();
        }
        
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        //  Tabelle erzeugen
        JTable table = new JTable(data, columnNames){
        	@Override
        	public boolean isCellEditable(int row, int column)
        	{
        		return false;
        	}
        };
        
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        Tabellenanpassung tca = new Tabellenanpassung(table);
        tca.anpassungAllerSpalten();
        
        JFrame frame = new JFrame (text);
        JScrollPane pane = new JScrollPane(table);
        
        frame.add(pane);
        frame.pack();     
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

Nun bekomme ich aber bei jedem Aufrug immer eine Fehlermeldung:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at risikoverwaltung.view.AuswertungGUI.actionPerformed(AuswertungGUI.java:1547)
	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$400(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$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.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$1.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)

Hat da jmd ne Idee, was da verkehrt ist? Alles in einer Klasse hat super funktioniert, aber nun klappt es nicht mehr.

Vielen Dank.
 

MarDaiBre

Aktives Mitglied
Habs raus. Ich habe vergessen
Java:
private Datenbankschnittstelle db;

zu initialisieren:

Java:
private Datenbankschnittstelle db = new Datenbankschnittstelle();

Nun geht es.

@njans: Ich finde die Fehlermeldungen für < Fortgeschrittenenlevel immer wenig hilfreich (aber ist halt nicht anders machbar), da er mir nur sagte, dass der Fehler bei dem Methodenaufruf
Java:
db.getTabellen(text, query);
liegt. Aber nun geht es ja :) Danke!
 

Harry Kane

Top Contributor
Ich finde die Fehlermeldungen für < Fortgeschrittenenlevel immer wenig hilfreich (aber ist halt nicht anders machbar), da er mir nur sagte, dass der Fehler bei dem Methodenaufruf
Java:
db.getTabellen(text, query);
liegt.
Er hat dir auch die Art des Fehlers gesagt. Wenn in db.getTabellen(text, query) eine NPE fliegt, muss db null bzw. nicht initialisiert sein. Wenn text oder query null wäre und die getTabellen-methode damit nicht umgehen könnte, würde der Fehler nicht bereits beim Aufruf der methode fliegen, sondern erst im Methodenrumpf, und die obersten Zeile im stack trace wäre sowas wie:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at risikoverwaltung.Datenbankschnittstelle.getTabelle(Datenbankschnittstellejava:123) at risikoverwaltung.view.AuswertungGUI.actionPerformed(AuswertungGUI.java:1547)
 

MarDaiBre

Aktives Mitglied
Hmmm, guter Hinweis! Ich habe sonst immer mit System.out.print gearbeitet, um zu schauen, wie weit er überhaupt kommt. Aber da kann ich das nun schon eher sehen. Danke!
 

stg

Top Contributor
Hmmm, guter Hinweis! Ich habe sonst immer mit System.out.print gearbeitet, um zu schauen, wie weit er überhaupt kommt. Aber da kann ich das nun schon eher sehen. Danke!

Etwas allgemeiner:
Schau immer zunächst auf die erste Zeile im StackTrace, die auf eine deiner eigenen Klassen verweist. Das ist (meistens) die Stelle, an der du nach dem Fehler suchen musst :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J dynamische Auswahl einer überladenen Methode Java Basics - Anfänger-Themen 5
ohneInformatik; Dynamische Zinsen. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
L Dynamische Anzahl an Arrays mit verschiedenen Namen erzeugen Java Basics - Anfänger-Themen 6
L Dynamische Bindung Java Basics - Anfänger-Themen 3
W OOP Definition / Abgrenzung dynamische Bindung Java Basics - Anfänger-Themen 11
J Dynamische Datenstrukturen Java Basics - Anfänger-Themen 0
L Variablen Dynamische Variablenname Java Basics - Anfänger-Themen 9
L Dynamische Programmierung Java Basics - Anfänger-Themen 0
M Schlüsselworte Dynamische Polymorhpie Java Basics - Anfänger-Themen 32
J OOP Dynamische Objektnamen Java Basics - Anfänger-Themen 6
Ste3et_C0st Dynamische While/For Schleife Java Basics - Anfänger-Themen 7
F Erste Schritte Dynamische Variablen Java Basics - Anfänger-Themen 15
S Dynamische Variable ist? Java Basics - Anfänger-Themen 11
S Verwirrung - Dynamische Bindung greift nicht Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
P Klassen statische oder dynamische(?) Klasse Java Basics - Anfänger-Themen 3
J Dynamische Liste durchsuchen + anpassen Java Basics - Anfänger-Themen 3
A Schlüsselworte dynamische Stringteilung Java Basics - Anfänger-Themen 4
C Dynamische (AJAX) Inhalte einer Webseite mittels Java auslesen Java Basics - Anfänger-Themen 2
W Übungsaufgabe:Dynamische Datenstrukturen Java Basics - Anfänger-Themen 10
B dynamische erzeugung eines Objektes Java Basics - Anfänger-Themen 21
L Dynamische Objektgenerierung Java Basics - Anfänger-Themen 4
K Dynamische Bindungsregel Java Basics - Anfänger-Themen 2
B dynamische/statische Typen Java Basics - Anfänger-Themen 2
C dynamische JTextFields durchlaufen Java Basics - Anfänger-Themen 5
H Dynamische Bindung mit Interfaces und LinkedList Java Basics - Anfänger-Themen 7
N OOP Dynamische Objekte und nach Parametern durchsuchen Java Basics - Anfänger-Themen 4
M dynamische JPanels/Component Java Basics - Anfänger-Themen 3
X dynamische Listen Java Basics - Anfänger-Themen 2
A Schnelle, dynamische, geordnete Datenstruktur? Java Basics - Anfänger-Themen 11
M Dynamische JButtons mit ActionListener Java Basics - Anfänger-Themen 7
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
C Dynamische Matrizen Java Basics - Anfänger-Themen 4
0 Dynamische Datenstruktur ohne Duplikate und mit direkter Elementauswahl Java Basics - Anfänger-Themen 3
N Vererbung/Dynamische Bindungen Java Basics - Anfänger-Themen 15
W Dynamische Bindung Java Basics - Anfänger-Themen 3
P jsp tags und scriplets mischen dynamische werte an jsp tag Java Basics - Anfänger-Themen 2
S Dynamische Tabelle Java Basics - Anfänger-Themen 2
P Suche Ersatz für dynamische arrays Java Basics - Anfänger-Themen 2
T Dynamische Reaktionen Java Basics - Anfänger-Themen 29
P Dynamische Bindung Java Basics - Anfänger-Themen 8
F Dynamische Speicheranpassung und exe Java Basics - Anfänger-Themen 9
D Dynamische Objektnamen / Variablen als Objektnamen verwenden Java Basics - Anfänger-Themen 3
C JTable und dynamische Speicherung Java Basics - Anfänger-Themen 2
M Dynamische Wertsetzung von Variablen durch Eingaben Java Basics - Anfänger-Themen 9
J Dynamische Größenveränderung der Komponenten verhindern Java Basics - Anfänger-Themen 8
C Dynamische Operatoren! Java Basics - Anfänger-Themen 5
R dynamische Variablennamen Java Basics - Anfänger-Themen 3
M dynamische, assziative Arrays Java Basics - Anfänger-Themen 2
I dynamische mehrdimensionales Array Java Basics - Anfänger-Themen 8
H Unterschied statischer/dynamische Typ einer Variablen Java Basics - Anfänger-Themen 2
H statische,dynamische Bindung Java Basics - Anfänger-Themen 4
0 Dynamische Speicherverwaltung Java Basics - Anfänger-Themen 4
B Dynamische If Anweisung Java Basics - Anfänger-Themen 13
B Dynamische Variable Java Basics - Anfänger-Themen 12
C Dynamische Arraygröße Java Basics - Anfänger-Themen 2
M dynamische tabellen Java Basics - Anfänger-Themen 2
G Java dynamische Arrays?? Java Basics - Anfänger-Themen 2
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben