Sichbarkeit von Objekten / Methoden in verschiedenen Files

Status
Nicht offen für weitere Antworten.

cyb€r Fry

Mitglied
Hallo!

Ich habe ein Problem mit der Sichtbarkeit von Objekten / Methoden.
Ich habe den Quellcode zur besseren Übersicht in drei Files gepackt.

1) Eine Klasse nennt sich SocketClass und regelt die Verbindung zu einer Netzadresse.
2) Eine Klasse die sich GuiClass nennet, stellt das GUI bereit.
3) Eine Klasse die alles aufruft.

Wenn ich jetzt aus der GUI Klasse einen neues Objekt der Klasse SocketClass erzeuge, und die Ausgabe über System.out.println($ausgabe) ausgebe funktioniert es, ich bekomme die Meldung vom Webserver in der Konsole. Jetzt will ich das aber nicht in der Konsole, sondern in einem Fenster haben.
Zur Übersicht:
Code:
//Klasse GuiClass
//Im Konstruktor
...
// In diese Area soll die Ausgabe, die die Methode askServer() liefert
logTextArea = new JTextArea("Ausgabe",15,40);
...
//Hier erstelle ich ein Objekt der Klasse SocketClass
sc = new SocketClass("www.xyz.de",80);
try
{
        sc.askServer();
}
catch(IOException e)
{
       System.out.println(e);
}
Außerhalb des Konstruktors habe ich dann die einzelnen Objekte deklariert, damit ich später auch noch drauf zugreifen kann, also z.B.
SocketClass sc;
JTextArea logTextArea;
usw.
Das funktioniert auch!

Meine Klasse SocketClass
Code:
 public void askServer() throws IOException
    {
        String befehl = "GET /" + domain + "HTTP/1.0\n\n";
        writer.print(befehl);
        writer.flush();
        
        boolean done = false;
        while(!done)
        {
            String ausgabe = reader.readLine();
            if (ausgabe == null) 
            {
                  done = true;
             }
            //else System.out.println(ausgabe); <--- das geht!
            else
           { 
                  //Hier möchte ich in das Textfeld schreiben, aber so gehts nicht
                 logTextArea.append(ausgabe);//<--- das geht nicht!
           }
        }
    }

folglich bekomme ich den Fehler
Code:
SocketClass.java [48:1] cannot resolve symbol
symbol  : variable logTextArea 
location: class SocketClass
            else logTextArea.append(ausgabe);
Mit dem fehler kann ich zwar was anfangen, aber ich weiß nicht wie und wo ich logTextArea deklarieren muss, damit er das findet.
Ich habe eigentlich erwaretet, dass ich durch die Deklaration von
Code:
JTextArea logTextArea;
in der Klasse GuiClass das logTextArea so sichtbar mache, das es funzt! Wo ist der Fehler?
Danke schonmal für Antworten

Fry
 
B

bygones

Gast
wenn ich es richtig verstanden habe liegen die Klassen in unterschiedlichen Files ? richtig ?
Dann kennt die Socket klasse natürlich die TextArea nicht, da es eine Variable der GUI Klasse ist !!!.

3 Möglichkeiten:
  • 1. du gibts der socketklasse beim erzeugen eine instanz der gui klasse mit und greifst dann in der socketklasse auf die gui klasse zu (nicht so gut)

    2. beide klassen (gui & socket) kennen jeweils die Controllerklasse (die 3. Klasse von dir). Wenn sich nun in der socketklasse was ändert schickt die die Änderung an die Controllerklasse, die wiederum leitet sie in deinem Fall an die GUI weiter (ist gut, da die Ebenen getrennt sind, d.h. die Socket klasse muss sich nicht drum kümmern, wie das alles angezeigt wird. Ist sehr flexibel).

    3. Du schaust dir mal die Observer / Oberservable Struktur von Java an (siehe Api). Die Gui meldet sich als Observer bei der Socket klasse an, die von Observable erbt. Dann kann die Socket klass einfach über den aufruf notifyObservers der GUI bescheid geben, dass sich was geändert hat. und die reagiert drauf. Find ich am besten, denn z.b. könntest du mehrere Observers anmelden und so mehrere ausgaben bzw. reaktionen veranlassen. Weiterhin sind die klassen schön getrennt und das system ist flexibel und leicht erweiterbar
 

Tobias

Top Contributor
Um auf Instanzvariablen zugreifen zu können, mußt du immer eine Referenz auf die entsprechende Instanz mitgeben (Also ein Objekt erzeugen). Ausserdem müssen alle Variablen und Methoden, die von aussen sichtbar sein sollen, als public deklariert sein, was deine JTextLogArea _nicht_ ist. Zu Zugriffsspezifizierern guckst du hier:

http://www.java-forum.org/de/viewtopic.php?t=1546

mpG
Tobias

[Edit] Verdammt nur zweiter. Und dann auch noch mit der schlechteren Antwort...[/Edit]
 
B

bygones

Gast
Tobias hat gesagt.:
[Edit] Verdammt nur zweiter. Und dann auch noch mit der schlechteren Antwort...[/Edit]
Sorry :roll:

Noch ein Hinweis: Bitte NIEMALS Instanzvariable public definieren !! macht sie private und nur über getter bzw. setter methoden zugreifbar !!
 
G

Guest

Gast
danke für eure antworten!
ich habe jetzt vom Prinzip glaube ich verstanden was ihr meint, kann ich dazu mal einen kleinen Codehappen haben?
Also weil einfach die JTextArea als
Code:
public
zu deklarieren bringt den gleichen Fehler zu Tage. Oder hab ich das jetzt doch net verstanden :roll:
 
B

bygones

Gast
Mein Favorit der Oberserver :D (geht aber nur, wenn die Socket Klasse von keiner anderen Klasse erbt !!)
Code:
public class SocketGUI extends JFrame implements Observer {
 private JTextArea area;
 
 public SocketGUI(Socket s) {
   // intialisier den frame so wie er aussehen soll
   s.addObserver(this);
 }
 
 // stammt vom interface observer
 public void update(Observable o, Object arg) {
  // arg könnte z.b. der anzuzeigende Text sein....
    area.append(arg.toString());
 }
}


public class Socket extends Observable {
 ......
  public void askServer() throws IOException  {
        String befehl = "GET /" + domain + "HTTP/1.0\n\n";
        writer.print(befehl);
        writer.flush();
       
        boolean done = false;
        while(!done)  {
            String ausgabe = reader.readLine();
            if (ausgabe == null) {
                  done = true;
             }
           setChanged; // es wird markiert, dass sich das objekt geändert hat
            notifyObservers(ausgabe); // hier werden nun alle Observers benachrichtigt !!
        }
    }
}

public class Controller {
  public static void main(String[] args) {
    Socket s = new Socket();
    SocketGUI gui = new SocketGUI(s);
    s.starte();
    ....
  }
}
 
G

Guest

Gast
erstmal danke für das beispiel. Den Observer kenne ich gar nicht, damit muss ich mich dann mal befassen. also mit meinem weg komme ich jetzt mit einer kleineren änderung nicht weiter, richtig?
wenn dann observer das beste ist werde ich mir das mal angucken müssen!

thx

fry
 
B

bygones

Gast
Anonymous hat gesagt.:
wenn dann observer das beste ist werde ich mir das mal angucken müssen!
Ich finde ihn am besten, weil er einfach ist und einem viel Arbeit erspart.... d.h. nicht das es allg. die beste Lösung ist !
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
B Sent and Receive Funktionen zwischen Objekten ermöglichen? Allgemeine Java-Themen 8
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
PCOmega137 Objekten zufällig erzeugte Namen geben Allgemeine Java-Themen 2
T Speichern von Objekten Allgemeine Java-Themen 2
D Serialisierung und Deserialisierung von Objekten - Frageprogramm Allgemeine Java-Themen 4
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
M loeschen von objekten Allgemeine Java-Themen 22
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
F Best Practice Große Anzahl an Objekten speichern und lesen Allgemeine Java-Themen 19
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
B Endlosschleife beim Verteilen von Objekten Allgemeine Java-Themen 4
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
D Verwaltung von sehr vielen Objekten Allgemeine Java-Themen 12
G problem: array aus objekten Allgemeine Java-Themen 10
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
S Zur Laufzeit Klasse mit einer anzahl von X Objekten erstellen Allgemeine Java-Themen 5
B OOP Auf Zustandsänderungen von Objekten reagieren Allgemeine Java-Themen 2
H Best Practice zu vielen konstanten Objekten? Allgemeine Java-Themen 10
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
P J-Unit vergleich von 2 Objekten merkwürdig Allgemeine Java-Themen 7
Landei Guice - Injection von "zwischendurch" erzeugten Objekten Allgemeine Java-Themen 4
S Sortieren nach Objekten Allgemeine Java-Themen 13
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
D Von mehreren Objekten eine Eigenschaft abfragen Allgemeine Java-Themen 11
G Array mit neuen Objekten der selben Klasse füllen Allgemeine Java-Themen 2
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
M Schnittmenge von Objekten Allgemeine Java-Themen 3
N Performates lesen von Objekten aus Dateien Allgemeine Java-Themen 2
hdi Speichergröße von Objekten & Referenzen Allgemeine Java-Themen 8
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
C ArrayList (mit Objekten) sortieren Allgemeine Java-Themen 12
C TreeSet mit Objekten befüllen Allgemeine Java-Themen 12
L Lesen von Objekten aus Datei Allgemeine Java-Themen 17
S Liste mit verschiedenden Objekten Allgemeine Java-Themen 15
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
J ArrayList aus Point-Objekten nach dem x-Wert ordnen Allgemeine Java-Themen 2
T abspeichern und laden von objekten in JFrame Allgemeine Java-Themen 2
G Serialisieren von Objekten : IO Exception beim Schreiben Allgemeine Java-Themen 3
G Kompletten Frame mit allen Objekten resizen Allgemeine Java-Themen 10
G Tagesdifferenz zw. 2 Gregorian Objekten Allgemeine Java-Themen 14
M Endgültiges Löschen von Objekten Allgemeine Java-Themen 7
M Problem mit Objekten Allgemeine Java-Themen 11
B Serialisieren von mehreren Objekten Allgemeine Java-Themen 7
W Threads & Pipes --> Ist eine Übergabe von Objekten mö Allgemeine Java-Themen 7
T casten von Objekten aus einer ArrayList Allgemeine Java-Themen 4
O kommunikation zw. objekten Allgemeine Java-Themen 7
G List mit selbstdefinierten Objekten sortieren Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
M String aus array mit Objekten suchen Allgemeine Java-Themen 26
F Array von Objekten Allgemeine Java-Themen 2
B Darstellung von Objekten dauern unterschiedlich lang ! Allgemeine Java-Themen 5
G hashtable mit objekten Allgemeine Java-Themen 9
G Probleme mit Clonen von Objekten die JComponents enthalten Allgemeine Java-Themen 3
M Alle möglichen Kombinationen von mehreren Objekten berechnen Allgemeine Java-Themen 6
D OOP-Style bei Objekten Allgemeine Java-Themen 35
H Speicher freigeben klappt nicht bei Image Objekten, warum? Allgemeine Java-Themen 8
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
T Problem mit Zuweisung von Objekten Allgemeine Java-Themen 5
K Ordner/Dateistruktur in Objekten nachbilden Allgemeine Java-Themen 6
C Uebergabe von Objekten nach anklicken von JCheckBox Allgemeine Java-Themen 5
B Array von Objekten Allgemeine Java-Themen 3
W Mit Date-Objekten arbeiten Allgemeine Java-Themen 10
S Sortieren Von Objekten Nach Attribut Allgemeine Java-Themen 6
lhein Übergabe von Objekten von Java an C über JNI Allgemeine Java-Themen 5
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben