# Variable aus anderer klasse lesen.



## Bibiman (26. Mrz 2007)

hab ein kleines problem an dem ich gerade hänge (ist das erste mal dass ich es mit java zu tun habe, also sorry wegen meines unwissens in fundamentalen dingen)
ich habe eine klasse, die für eine gui zuständig sein soll. ich möchste aus dieser klasse heraus auf eine variable in einer anderen klasse zugreifen. beide files sind im selben package. nur wie kann ich jetzt darauf zugreifen? mit "andereklasse.variable" funktioniert es nicht...


----------



## Guest (26. Mrz 2007)

Hi.

Du solltest dir in der Klasse, in der sich deine "zu lesende" Variable befindet, eine Methode getVariablenName() schreiben, die deine Variable als Rückgabewert hat.

Also z.B.


```
class A {

private String myVar;

public String getMyVar(){

return myVar;

}

}
```

Nur wenn du deine Variable als "public" deklarierst, dann könntest du mit Klassenname.Variablenname darauf zugreifen, sollte man aber nicht machen.

Gruß

user0001


----------



## Leroy42 (26. Mrz 2007)

Anonymous hat gesagt.:
			
		

> Nur wenn du deine Variable als "public" deklarierst, dann könntest du mit _Klassenname_.Variablenname darauf zugreifen, sollte man aber nicht machen.



KlassenInstanz.Variablenname


----------



## SnooP (26. Mrz 2007)

und dabei auch noch der Hinweis, das du natürlich von beiden Klassen vorer mit new Objekte erstellen musst - dann können die Objekte auch auf ihre Variablen zugreifen (sollten sie public sein) bzw. Methoden untereinander aufrufen... evtl. nochmal etwas über OOP in einem einfachen Java-Buch lesen? z.B. der Javainsel?


----------



## Bibiman (26. Mrz 2007)

danke für die schnellen antworten.
leider funktioniert der zugriff so nicht, obwohl die variable als public deklariert ist.
ich habe meine hauptklasse (bzw eben eine instanz davon) und meine gui-klasse, welche aus der hauptklasser heraus mit "new" ins leben gerufen wird.
der zugriff in der guiklasse sieht dann so aus:
"...=hauptklasseninstanz.variable"
allerdings bekomm ich jetzt die fehlermeldung "package hauptklasseninstanz doesn't exist"...


----------



## SnooP (26. Mrz 2007)

so gehts:

```
public class Klasse1 {
   public int var = 17;  //wie gesagt - besser nicht public machen
   //...
}

public class KlasseMain {
   public static void main(String[] args) {
      Klasse1 k1 = new Klasse1();
      System.out.println(k1.var);
      k1.var = 5;
      System.out.println(k1.var);
}
```


----------



## Leroy42 (26. Mrz 2007)

Poste einfach mal Code: 

- Wo du die Instanzen definierst
- Wie du genau auf sie zugreifst


----------



## Bibiman (26. Mrz 2007)

@snoop so hab ichs eigentlich ja gemacht (glaub ich...)

das hier ist die variable in meiner hauptklasse

```
public static jpcap.NetworkInterface[] devices_;
```

hier initialisiere ich meine hauptklasse:

```
public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		System.setProperty("java.library.path", "./lib");
		RKNApp app = new RKNApp();
		app.start();
	}
```

dort mache ich dann folgenden aufruf um meine gui-klasse zu starten:


```
...
 else if(input.toLowerCase().equals(CONST_COMMAND_STARTGUI))
			{
				rkngui rkngui_ = new rkngui();
                                rkngui_.setVisible(true);
			}
```

in diesr gui-klasse möchte ich nun auf device_ zugreifen

```
for (int device_id = 0; device_id < app.devices_.length; device_id++) 
		{...
```

in jeder der beiden files habe ich zu begin folgendes stehen

```
package rkn;
```

der fehler ist allerdings der:
C:\rkn-framework\rkn\rkngui.java:147: package app does not exist


----------



## SlaterB (26. Mrz 2007)

edit:
ach mist, noch mal neu überlegen, hier nicht lesen


----------



## Bibiman (26. Mrz 2007)

hm problem dürfte sein, dass er die instanz app einfach nicht kennt, oder?
wie kann ich machen dass sie in der klasse rkngui bekannt ist?


----------



## Leroy42 (26. Mrz 2007)

Da es sich um ein static-Attribut handelt, schreibst du einfach:


```
for (int device_id = 0; device_id < MeineHauptklasse.devices_.length; device_id++)
```


----------



## Bibiman (26. Mrz 2007)

so hab ich es ja stehen, aber die instanz der hauptklasse ist nicht bekannt...


----------



## Leroy42 (26. Mrz 2007)

Die brauchst du doch auch nicht, wenn du

```
public static jpcap.NetworkInterface[] devices_;
```
in der Hauptklasse als static deklariert hat.


```
class MyMain {
  public static jpcap.NetworkInterface[] devices_;
  ...
}

class GUI {
  void tuWas() {
    for (int device_id = 0; device_id < MyMain.devices_.length; device_id++)
  }
}
```


----------



## Bibiman (26. Mrz 2007)

danke, das funktioniert so. allerdings bräuchte ich auch zugriff auf variable, die nicht static sind. wie kann ich das am besten anstellen?


----------



## Leroy42 (26. Mrz 2007)

Dazu müßte deine Leseklasse eine Instanz der Main-Klasse erhalten.
Am besten durch Übergabe im Konstruktur


```
class A {
  B meinB;
  public A(B meinB) {
    this.meinB = meinB;
  }
  ...
  System.out.println(meinB.answer);
}

class B {
  int answer = 42;
  public static void main(String[] args) {
    B b = new B();
    A a = new A(b);
  }
}
```


----------



## Bibiman (26. Mrz 2007)

danke.
wenn ich dem konstruktor der guiklasse einen pointer auf die instanz der hauptklasse übergebe, und dann darüber auf die variablen zugreife sollte es auch gehen, oder?

also so:


```
RKNApp myhauptklasse;

//konstruktor der gui-klasse
public rkngui(RKNApp temp) 
  {
        myhauptklasse=temp;
   }

//lesefunktion
public void blubb()
{
   x= myhauptklasse.variable;
}
```


----------



## Wildcard (26. Mrz 2007)

1. Das Ding heißt Referenz und nicht Pointer (weil es kein Zeiger ist)
2. Warum hast du es nicht einfach ausprobiert?
3. Nimm lieber getter und setter statt direkt auf Felder eines Objekts zuzugreifen


----------

