Ich habe eine kleine Anwendung, die eine Reihe von Klassen enthält. Die Anwendung wurde entwickelt, um eine Verbindung zu einem Server und send/recv binary protocol msgs herzustellen.Java-Design Zugriff auf Klassenvariablen
Ich habe diesen Teil mit einer Verbindungs-Manager-Klasse und einer Nachrichtenprozessor-Klasse arbeiten. Der Verbindungsmanager wird instanziiert und erstellt zwei Threads zum Senden und einen zum Empfangen von Nachrichten. Beim Empfang einer Nachricht wird ein neues Nachrichtenprozessorobjekt instantiiert, um das Parsen der Nachricht zu handhaben.
Ich habe jetzt eine GUI mit Connect, Logon etc ... Schaltflächen erstellt.
Die GUI erstellt eine Instanz des Verbindungsmanagers, und wenn die Verbindungstaste gedrückt wird, ruft sie connection manager.connect auf.
Wenn die Anmeldeschaltfläche gedrückt wird, ruft sie connection manager.logon auf.
Das Verbindungsmanager-Objekt hat einen Booleschen Namen, der als verbunden bezeichnet wird.
so kann die GUI Verbindung manager.connected lesen und wahr/falsch sehen. Nun, was ich tun muss, ist Zugriff Connection Manager.connected von meinem Message-Prozessor-Objekt, die innerhalb der Verbindungs-Manager jedes Mal erstellt wird, wenn eine Nachricht empfangen wird. Wenn also der Nachrichtenprozessor eine Anmeldebestätigungsnachricht sieht, kann er connection manager.connected = true setzen und die GUI, die das Verbindungsmanagerobjekt erstellt hat, kann den Wert lesen.
Allerdings kann ich nicht sehen, wie ich auf connection manager.connected vom Message-Prozessor-Objekt zugreifen kann. Ich denke, das ist möglicherweise ein Fehler in meinem Design?
Codebeispiele.
GUI erstellt Verbindungs-Manager-Objekt zu lesen in GUI Textfelder
cm = new ConnectionManager(jTextField1.getText(), jTextField2.getText())
Connection Manager einen Booleschen hat verbunden. Es erstellt auch ein Lesen und Schreiben von Netzwerk-Thread
public boolean connected;
executor.execute(new MessageProcessor(header, message, msgType));
Inside MessageProcessor Ich möchte cm.connected aktualisieren - ist das möglich?
Danke
Wie planen Sie den Zugriff auf 'cm' von Ihrem 'MessageProcessor'-Objekt aus? es geht auch um die Kommunikation zwischen Objekten. Wenn Sie nur einen 'ConnectionManager' für Ihre Sende-/Empfangs-Threads haben und wenn Sie immer ein Paar von Threads (send/receive) haben, können Sie einfach' public static boolean connected' verwenden und beim Verbindungsaufbau auf '' setzen wahr '. Dies ist keine gute Lösung von Ihnen haben mehrere thead-Paare (für senden/empfangen Aktivitäten). – ha9u63ar
Ich dachte, ich könnte mein in der GUI erstelltes Verbindungsmanager-Objekt zurück in den Verbindungsmanager übergeben, so dass MessageProcessor darauf zugreifen kann, aber das scheint albern zu sein. –
Als schnell und schmutzig Test können Sie dies tun - aber wirklich, Objekte als Mitglied Variablen zu verwenden, wie @sharonbn demonstriert, ist der richtige Ansatz. – ha9u63ar