Probleme mit Klassenaufruf (Vererbung)

Lautsprecher

Erfahrenes Mitglied
Hallo ich habe eine Klasse Info erstellt die mir eine JFrame mit einigen Buttons, TextAreas etc. erstellt. Wenn ein Benutzer auf den Button "Anmelden" klickt, soll ein JDialog-Fenster (Klasse: Passwortabfrage) auf gehen, damit er seinen Namen und sein Passwort eintragen kann. Wenn er anschließend "OK" drückt soll das JDialog-Fenster wieder geschlossen werden und der Benutzer mit dem Hauptprogramm weiter arbeiten.

Mein Problem ist, dass ich beim Aufruf des JDialogs immer eine Neue Instanz der Klasse Info erzeuge. Wenn ich den Dialog schliesse, bleibt die Instanz erhalten, so dass ich plötzlich in der Windows-Taskleiste 2 JFrames des Hauptprogramms habe.

Leider bin ich in Vererbung und der Verwendung mehrerer Klasse nicht so fit.........

Code:
Button "Anmelden" in der Klasse: Info

action performed...
{
Passwortabfrage padialog = new Passwortabfrage(hauptpgm)
;}


Klasse Passwortabfrage

Code:
public class Passwortabfrage {

public Info hauptfenster;


public Passwortabfrage(JFrame frame) 
{
		
        hauptfenster  = (Info)frame;       
 initialize();
}


public void initialize() 
{
     getJDialog();  //hier baue ich mein JDialog zusammen
jDialog.setEnabled(true);
jDialog.setVisible(true);
jDialog.show()

//Variablen und Methoden aus der Klasse Info:

//ab hier bekomme ich eine   Nullpointer Exception
hauptfenster.hauptschalterfarbe1 = false;   

hauptfenster.hauptpgm_sperren();
etc.
}

beim Button "OK":  actionPerformed
{
      jDialog.setVisible(false);
       jDialog.setEnabled(false);
        jDialog.hide();

etc.
}
}

Die Hauptklasse: Info wird folgendermaßen aufgerufen: (habe dort nichts verändert)


Code:
public class Info extends JFrame implements ActionListener
{
      public JFrame hauptpgm = null;
      public Passwortabfrage padialog;
     public static void main(String[] args)
     {
      Info application = new Info();  				
     }

       public Info() 
       {
		
		hauptpgm = new JFrame();
		//super();
		initialize();  //hier wird das JFrame dann aufgebaut
	
		
         }


    }
 
Zuletzt bearbeitet:
Hallo,

ich weiß nciht ob ich dir mit meinem Ratschlag weiterhelfen kann:

Hast du es schon mit einem Destruktor (Löschen des Objekts) versucht ?


Gruß Truck
 
Hallo,

ich weiß zwar nicht, was das ganze jetzt mit Vererbung zu tun hat. Es liegt wirklcih daran, dass du in deinem Dialog eine neue Instance von Info anlegst. Warum machst du das überhaupt.

@_Truck_
In Java gibt es keinen Destruktor.


MFG

zEriX
 
Hallo,

ich weiß nciht ob ich dir mit meinem Ratschlag weiterhelfen kann:

Hast du es schon mit einem Destruktor (Löschen des Objekts) versucht ?


Gruß Truck

In Java gibt es keinen Destruktor in dem Sinne, wie z.B. in C++.

Entweder es endet die Laufzeit des Objektes oder das Objekt ist null. Erst dann schreitet der gc ein, welcher die eigentliche Destruktor Funktion übernimmt.
 
Zuletzt bearbeitet:
In Java gibt es keinen Destruktor in dem Sinne, wie z.B. in C++.

Entweder es endet die Laufzeit des Objektes oder das Objekt ist null. Erst dann schreitet der gc ein.

Danke der Korrektur.
Ich meinte ja auch im Sinne von :).

Gibt es also keine Möglichkeiten in Java eine Instanz wieder zu löschen ?
Dann ist ja Java auf Sequenzdiagramme gar nicht übertragbar ?
 
In Java werden verweiste Objecte durch die Garbage-Collection gelöscht. Das heißt, sobald keine Referenz mehr auf das Object zeigt, wird es automatisch gelöscht.

Man kann das auch selbst "starten" indem man System.gc() aufruft.

MFG

zEriX
 
Nur so nebenbei:

Die negative Bewertung war übertrieben:

1. Ich wollte ihm mit meinem Hinweis lediglich auf einen Gedanken bringen, das fällt in meiner Kategorie ins Thema Hilfe

2. Kannst du (Bewerter) lediglich mit einer Mini-Java- Aussage meine Javakenntnisse nicht beurteilen.

3. Hat meine Aussage einem anderen dazu gebracht einen Lösungsvorschlag zu verfassen !

Wollte ich nur einmal gesagt haben. :mad:


Gruß Truck
 
Hallo,

ich erzeuge die _Instanz hauptfenster = new Info(); in der Klasse passwortabfrage,
momentan weil sonst meine Variablen aus der Info Klasse nicht erkannt werden

Ich steuere die Variablen in der Klasse Passwortabfrage dann z.B. so an:

hauptfenster.variable_aus_info = "124"

ansonsten weis ich nicht wie man die Variablen besser ansteuern kann.....
 
Dann leg keine neue Instance an, sondern übergeb die Instance im Konstruktor.

Java:
private JFrame frame = null;

public DeinDialog(JFrame frame){
this.frame = frame;
}


So arbeitest du nur mit einer Instance.

MFG

zEriX
 
Hallo Zerix,

danke für deine Hilfe, allerdings verstehe ich es noch nicht so ganz, wie ich dein Code anwenden muss.

In welcher Klasse muss ich das JFrame definieren?

public MeinDialog soll wahrscheinlich dann meine public Passwortabfrage() sein?

dann muss ich doch noch in meiner Button "Anmelden" Methode das JFrame im Konstruktor übergeben? also müsste ich doch dann auch JFrame in der Klasse Info deklarieren? Aber warum eigentlich JFrame und nicht JDialog


Habs jetzt mal so probiert:

Code:
public Passwortabfrage(JDialog frame) 
{
	this.jDialog  = frame;
	 //hauptfenster = new Info();
	initialize();
}

in Klasse Info:

Code:
public JDialog framepa = null;
Passwortabfrage padialog = new Passwortabfrage(framepa);

jetzt habe ich wieder das Problem das er in der Klasse Passwortabfrage meine Variablen aus der Klasse Info nicht mehr kennt.....


PS: Wer nicht dumm frägt lernt auch nichts dazu :-)
 
Zuletzt bearbeitet:
Zurück