Situation: Ein Hauptformular ruft einen modalen jDialog mit Textfeldern auf, in denen Parameter vom Benutzer zum Erstellen oder Ändern einer Instanz einer bestimmten Klasse ausgefüllt werden, nennen sie ClassA.Zugriff auf die modale Dialogvariable nach dem Aufruf der dispose-Methode
Wenn der Dialog eine vorhandene Instanz ändern muss, wird sie im Konstruktor als Parameter übergeben. Andernfalls erstellt der jDialog eine neue Instanz von ClassA.
Problem: das mainform muss auf diese neue Instanz zugreifen, und ich denke, es ist unreiner Code, das gesamte Hauptformular als Parameter zu übergeben und das Dialogfeld die neue Instanz durch einen Methodenaufruf dorthin zu schieben, weil auf diese Weise Ein perfekt wiederverwendbarer eigenständiger Dialog wird nur mit einem einzigen Hauptformular verwendbar, das einen bestimmten Klassennamen und eine Methode benötigt, um die neue Instanz zu erhalten.
Es ist viel logischer, das Hauptformular die neue Instanz aus dem jdialog nach dem Klicken auf die Schaltfläche OK abrufen, durch Aufrufen einer getClassAInstance() -Methode (die auch aufgerufen werden konnte, wenn eine vorhandene Instanz geändert wurde). Die Methode wird nach der Methode "setVisible (true)" für eine neue Instanz des betreffenden jdialogs aufgerufen. Der Dialog erscheint, der Thread des Hauptformulars wird schlafen, bis das Dialogfeld geschlossen wird (weil es modal ist). Die OK-Schaltfläche ruft die dispose() -Methode des jDialogs auf, dann ist die allererste Anweisung der getClassAInstance() -Aufruf auf dem jDialog vom mainform.
Hier ist die gleiche Sache in Code ..
ClassAInstanceMakerDialog imd = new ClassAInstanceMakerDialog(this, true);
imd.setVisible(true);
//imd.dispose(); after OK button click
System.out.println(imd.getClassAInstance()); //return a new ClassA instance
//output: whatever ClassA.toString() should return, works fine
Frage: Ich habe es ausprobiert und es scheint völlig in Ordnung zu arbeiten. Aber, ist es ein guter Code? Besteht die Gefahr, dass die Methode getClassAInstance() "null" zurückgibt, weil der Garbage Collector die ClassA-Instanz gesammelt hat, nachdem der jDialog entfernt wurde und bevor das Hauptformular den Aufruf abschließen konnte?
Bitte entschuldigen Sie, wenn ich mich nicht klar gemacht habe, ich bin kein englischer Muttersprachler. Wenn Sie lieber etwas Code sehen möchten, lassen Sie es mich wissen ...
Ihr Englisch ist gut und Ihre Frage gut konstruiert, 1+. –