Instanz auslesen?

Status
Nicht offen für weitere Antworten.

minzel

Aktives Mitglied
Hey !

Habe zu dem Thema irgendwie noch nichts gefunden. Habe folgendes Problem:

Ich habe ein JDesktopPane , darauf eine Klasse A die von JInternalFrame erbt. Möchte nun von meiner Hauptklasse oder einer anderen Klasse vom gleichen Programm die Objekte über die Instanz der Klasse A auslesen. (Mal was neues) Ich weiß es geht einfacher aber ist diese Variante denn möglich?
 

André Uhres

Top Contributor
Du brauchst nur die entsprechenden Referenzen, dann kannst du alles angreifen wozu du Lust hast. Eventuell musst du nur die Zugriffsberechtigung von private auf protected umändern.
 

minzel

Aktives Mitglied
Könntest du das genauer erklären mit den Referenzen? Hängt das ganze mit dieser serialID zusammen?
 

André Uhres

Top Contributor
Eine Referenz auf ein Objekt enthält als Wert die Adresse des
Objektes, auf das die Referenz zeigt. Die Adresse gibt an, an
welcher Stelle das Objekt im Arbeitsspeicher liegt.
Code:
package test;
public class A {
   protected String str = "Hallo";
   public A(){
      new B(this);
   }
}

package test;
public class B {
   pubic B(A refA){
      if(refA.str.equals("Hallo")){
         ...
      }
   }
}
Im Beispiel bekommt B die Referenz auf A über den Konstruktor geliefert.
B hat jetzt Zugriff auf den String der in A ist (refA.str).
 

minzel

Aktives Mitglied
Habe auf die schnell mal folgendes erstellt, was schon fast alles das macht was ich wollte:

Code:
package maintain;

import java.util.Vector;

import internalFrame.MaterialCalc;

public class InstanzHandler {

	private static Vector<MaterialCalc> vec = new Vector<MaterialCalc>();
	
	public InstanzHandler(MaterialCalc calc) {
		vec.add(calc);
	}

	public static Vector<MaterialCalc> getVec() {
		return vec;
	}
}

Kann jetzt verschiedene Instanzen der Klasse erstellen und alle mit getVec() abrufen. Das ist schon mal super. danke dafür. Muß jetzt nur mal schauen ... wenn eine Instanz geschlossen wird (terminiert) muss sie ja aus dem Handler wieder raus. Ging mit dem Dekonstruktor oder? Hab den aber bei Java noch nie anwenden müssen.

PS:
*klick* Mit einem WindowListener beim schließen des InternalFrame kann man ja die Instanz raussuchen und löschen. *GEIL *g
 

Murray

Top Contributor
Destruktoren gibt es in Java nicht. Es gibt lediglich Finalizer, aber die werden aufgerufen, bevor das entsprechende Objekt vom Garbage-Collector entsorgt wird - und wenn Du noch eine Referenz auf das Objekt hast, passiert das nicht. Die Referenz im Vector musst Du also explizit löschen.
 

minzel

Aktives Mitglied
Achso, okay ... habe im letzten Beitrag eben schon ein PS geschrieben :) mir ist schon der erleuchtende Weg in meinen Tagträumen erschienen :D
 

Wildcard

Top Contributor
noch was generelles:
Du solltest niemals einen Vector als return Wert haben. Gib nicht mehr bekannt als notwendig, aber eben auch nicht weniger :wink:
Beispiel:
Code:
  //schlecht
   public static Vector<MaterialCalc> getVec() {
      return vec;
   } 
   //besser
   public static List<MaterialCalc> getVec() {
      return vec;
   } 
   //am besten (wenn du die zusätzlichen Methoden von List nicht brauchst
   public static Collection<MaterialCalc> getVec() {
      return vec;
   }
 

minzel

Aktives Mitglied
mensch danke. Ja, tatsächlich brauch ich die Funktionen der Liste (Vektors) nicht. Jedeglich die Instanzen sind wichtig.
Werde dies gleich so anpassen.

Und was ich noch sagen wollte. Kein WindowListener sonder:

Code:
this.addInternalFrameListener(new InternalFrameAdapter() {
			public void internalFrameClosing(InternalFrameEvent e) {
				
			}
		});

nur so zur komplettierung :)
Immer her mit mehr brauchbaren tipps *g
<- Javajunkie
 

minzel

Aktives Mitglied
hm, da kommt aber schon das erste Problem mit dem Auslesen:

Code:
Collection<MaterialCalc> collect = InstanzHandler.getVec();
collect.get(...); // Gibt es nicht

PS:
Ich denke mal mit einem Iterator aber den Verweis auf die eigentliche Klasse (Instanz) ist mir gerade ein Rätsel.
 

Wildcard

Top Contributor
Wenn du nur über die Collection iterieren willst ist Collection ausreichend (siehe Iterator).
Wenn du Zugriff über einen Index brauchst musst du List nehmen.
 

minzel

Aktives Mitglied
ah, kk ...

Code:
Collection<MaterialCalc> collect = InstanceHandler.getVec();
Iterator i = collect.iterator();
while(i.hasNext()) {
	MaterialCalc m = (MaterialCalc) i.next();
}

mal wieder zu früh gepostet. Fettes THX
 

minzel

Aktives Mitglied
hm, wenn wir schon dabei sind, habe es jetzt hinbekommen wie gewollt. allerdings denke ich nicht das folgende methode elegant gelöst ist. Gibt es da noch verbesserungswürdiges?

Code:
	public static boolean disposeInstance(int id) {

		int instanceCounter = 0;
		Iterator<MaterialCalc> i = vec.iterator();
		while(i.hasNext()) {
			MaterialCalc m = (MaterialCalc) i.next();
			if ( id == m.instanceID ) {
				vec.remove(instanceCounter);
				return true;
			}
			instanceCounter++;
		}
		return false;
	}

Insbesondere stört es mich das "return true;" nicht fehlen darf. Da er die schleife weiter durchläuft und dann ein Exception wirft wenn keine mehr vorhanden sind. (Also 0 Instanzen)
Zum zweiten ist es dieser "instanceCounter", er muß ja zunächst mitlaufen damit ich weiß welche Instanz aus dem Vector gelöscht werden soll.

Es läuft so. Aber seit meiner letzten Javaprüfung die schon ein kleiner genickschlag war, wurde mir angeraten, wenn ich so denke das es doch läuft solle ich besser nochmal nachfragen ^^
 

Wildcard

Top Contributor
Gut das du nachgefragt hast. Wenn du einen Iterator verwendest, darfst du die Collection nicht gleichzeitig manipulieren.
Wenn die ID unabhängig von der Position im Vector ist (warum eigentlich Vector und keine ArrayList?)
Code:
   public static boolean disposeInstance(int id) {

      Iterator<MaterialCalc> i = vec.iterator<MaterialCalc>();
      while(i.hasNext()) {
         if(it.next().instanceID==id)
         {
              it.remove();
              return true; 
         }
      }
      return false;
   }
Wenn die ID der Position im Vector entspricht:
Code:
public static boolean disposeInstance(int id) {
     return vec.remove(id);
}

Ich verstehe den Sinn der Instanz-Verwaltung noch nicht ganz. Was genau willst du eigentlich machen?
Vieleicht gibt's da eine bessere Lösung...
 

minzel

Aktives Mitglied
danke dir, ersterer Vorschlag trifft zu, probier es nacher gleich aus, habe eben noch eine pause eingelegt.

Naja, will an dem Verfahren nicht viel mehr rütteln. Habe ein DesktopFrame auf dem man viele verschiedene Instanzen (JInternalFrame) erstellen kann. Jede Instanz die Offen ist möchte ich in einem, nennen wir es "Haupt"-InternalFrame, verwenden können. (Also auslesen). Darauf liegen je ein JLabel[] mit preisen und ein JTextField[] mit der eingegebenen Anzahl.
Es ist eine ungewöhnliche Steuerung, nicht alles starr auf einem JFrame zu haben, aber dafür ist ja die Programmierung glaube ich da. Neue Verfahren zu erfinden, umzusetzen und zu nutzen.
 

Wildcard

Top Contributor
Direkter Zugriff auf diese InternalFrames ist nicht zu empfehlen. Stattdessen solltest du ein Daten-Modell befüllen das an mehreren Stellen deiner Anwendung zum Einsatz kommen kann.
Wenn du aus anderen Gründen wirklich eine Referenz auf die InternalFrames haben musst, dann solltest du das eher über einen getter in der Desktop Pane realisieren.
In jedem Fall solltest du von deinem static Ansatz weg kommen.
 

minzel

Aktives Mitglied
Es soll ja nur eine Instanz von InstanceHandler erstellt werden. Oder so gibt es einen einfachen zugriff von überall.
Getter-Setter Methoden werd ich sicher noch machen.
 

Wildcard

Top Contributor
Du bekommst aber probleme sobald du mehr als eine DesktopPane verwenden willst.
static ist nicht OOP und immer eine (meist unnötige) Einschränkung der Flexibilität.
Aber mach deine eigenen Erfahrungen :wink:
 

minzel

Aktives Mitglied
ja, ne, so ein DatenHandler statt InstanzHandler reicht glaube auch zu. das statische würde dann auch verschwinden *hm, an sich kann ich aber die letzten stunden als umsonst betrachten :/

PS:
Hab mir das nochmal durch den Kopf gehen lassen. Die Statische InstanceHandler-Klasse ist ne , für mich, gute Lösung. Von der Klasse soll es ja nur eine Instance geben und behält mir die Möglichkeit vor noch auf andere Attribute zu zugreifen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
Thallius HTTPS Request mit unbekannter Instanz Allgemeine Java-Themen 24
S Speicherverwaltung bei Instanz- und Klassenvariablen JS vs. Java Allgemeine Java-Themen 2
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
OnDemand InetAddress Instanz Allgemeine Java-Themen 4
T Klassen Instanz einer Klasse ausserhalb des Jar Allgemeine Java-Themen 2
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
B JavaFX fxml, die selbe Instanz der Klasse Allgemeine Java-Themen 4
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
S Singleton Instanz löschen Allgemeine Java-Themen 5
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
M Neue Instanz/Kopie einer unbekannten Klasse Allgemeine Java-Themen 7
M Instanz "von außen" erstellen unterbinden Allgemeine Java-Themen 3
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
J Instanz-Felder einer Klasse initialisieren Allgemeine Java-Themen 6
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
M Instanz von Datenbankklasse Allgemeine Java-Themen 5
M Instanz erstellen Allgemeine Java-Themen 3
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
A Nur eine Instanz eines Programms ausführen Allgemeine Java-Themen 3
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
I size einer instanz Allgemeine Java-Themen 9
G überpüfen ob bereits instanz von java applikation läuft Allgemeine Java-Themen 4
B Instanz? Allgemeine Java-Themen 6
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
B nur eine Instanz eines Programms laufen lassen Allgemeine Java-Themen 8
G Nur eine Instanz einer Applikation Allgemeine Java-Themen 4
G Instanz IDs Allgemeine Java-Themen 13
P Nur eine Instanz eines Programms zulassen, wie geht das? Allgemeine Java-Themen 15
J Instanz einer inneren Klasse Allgemeine Java-Themen 9
H Methode einer zur Laufzeit generierten Instanz aufrufen Allgemeine Java-Themen 2
L Input/Output Email mit großer Pdf Anhang auslesen? Allgemeine Java-Themen 6
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
T INI - Einträge auslesen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
O PDF auslesen und verändern, was ist besser iText oder PDFBox ? Allgemeine Java-Themen 9
Robertop Status von Caps- und NumLock auslesen Allgemeine Java-Themen 1
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
G Mac Package auslesen Allgemeine Java-Themen 17
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
M verschiedene Dokumente auslesen Allgemeine Java-Themen 1
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
L Dateien richtig auslesen Allgemeine Java-Themen 6
F WireGuard Status auslesen Allgemeine Java-Themen 3
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
I DOM-Parser - Element im Element an bestimmten Stellen auslesen Allgemeine Java-Themen 1
N Txt Datei auslesen. Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
x46 Webseite in Java auslesen Allgemeine Java-Themen 2
M Html Seite auslesen Allgemeine Java-Themen 16
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
B Cookie auslesen Allgemeine Java-Themen 3
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
J Teil einer URL auslesen Allgemeine Java-Themen 13
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
C Atfx mit Hilfe von OpenAtfx auslesen Allgemeine Java-Themen 1
C Position von Pixeln in Bilder auslesen Allgemeine Java-Themen 2
M aktive WLAN Teilnehmer auslesen? Allgemeine Java-Themen 6
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
C Webseite auslesen Allgemeine Java-Themen 3
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
M Tastatureingabe von Sondertasten auslesen Allgemeine Java-Themen 6
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
4a61766120617274697374 PDF iText Wort Koordinaten auslesen Allgemeine Java-Themen 1
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
T Url aus txt Datei auslesen und öffnen? Allgemeine Java-Themen 4
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
KeVoZ_ Properties mit String auslesen Allgemeine Java-Themen 11
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
D Aktuell installierte Java Version auslesen unter Windows Allgemeine Java-Themen 5
M Parameter auslesen im Servlet Allgemeine Java-Themen 0
M Input/Output USB Geräteinstanzkennung auslesen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben