# repaint() von anderen Klassen aufrufen



## Zettelkasten (3. Mrz 2011)

Hallo!

Man kann ich Java ja verschiedene Klassen machen. Ich habe auch einige davon. Meine Hauptklasse (main) soll in der anderen Klasse (graphics) die Funktion "draw" aufrufen. Diese soll jetzt die Klasse "main" "repainten". Dies soll durch die Funktion "repaint()" funktionieren. Folgender Code geht aber nicht:

```
public static void draw()
{
    main.repaint();
}
```
Folgende Fehlermeldung wird angezeigt:

```
Cannot make a static reference to the non-static method repaint() from the type Component
```
Ich glaube, das hat was damit zu tun, das die Funktion draw() "static" ist und repaint() nicht. Aber sonst kann ich diese Funktion nicht aufrufen, da main(String[] args) auch "static" ist.

Weiß jemand, wie ich dieses Static-Problem umgehen bzw. beheben kann?
Danke schon im Vorraus!


----------



## SlaterB (3. Mrz 2011)

nicht-statische Methoden gehören zu Objekten von Klassen, es kann zu einem Zeitpunkt mehrere davon geben, 
stelle dir mehrere Strings vor und die substring()-Methode,
an welchen dieser Objekte willst du die Methode aufrufen?, siehst du wie ausgeschlossen unnütz ein Aufruf a la String.substring() ist?

deshalb geht das nicht mit dem Klassennamen, der übrigens preisverdächtig schlecht gewählt ist, niemals klein schreiben,
niemals wie eine schon bekannte Methode nennen, insbesondere nicht main..

du brauchst eine Referenz auf dein Objekt der Hauptklasse, 
wenn es nur ein solches gibt, kannst du zur Vereinfachung dieses in einer statischen Variable ablegen,


```
class Klasse {
  public static Klasse instance;
}

...
irgendwo beim Initialisieren:
instance = new Klasse();

Verwendung:
Klasse.instance.methode();
```


----------



## Zettelkasten (3. Mrz 2011)

...aber irgendwie kapier ich das nicht wirklich. Ich will ja von einer Klasse die static ist, auf eine nicht-static-Klasse zugreifen. Wie geht das????
So weit ich das verstehe ist das doch das Problem...


----------



## SlaterB (3. Mrz 2011)

es gibt keinen Zugriff auf nicht-static-Klasse bzw. das heißt auf entsprechende Objekte zuzugreifen,
ich könnte jetzt noch mein restliches Posting auch wiederholen, aber das wäre ja nix neues,

verstehst du 

String.substring() 

vs 

String x = ..;
x.substring() 

?


----------



## Zettelkasten (3. Mrz 2011)

Ach so! Danke!


----------

