# Problem beim Zeichnen von "Das Haus vom Nikolaus"



## Deniska93 (11. Sep 2010)

Hallo, habe soeben das Haus vom Nikolaus in Java programmiert (bzw es versucht). Es scheint meiner Meinung nach auch richtig, allerdings kommt, wenn ich das Programm kompilieren möchte, eine Fehlermeldung.

Compiliere C:\Users\*** ***\Desktop\Nikolaus.java mit Java-Compiler
Nikolaus.java:41:5: non-static method zeichneHaus() cannot be referenced from a static context
     zeichneHaus();
     ^
1 error


Hier ist mein Code:


```
import sum.kern.*;

public class Nikolaus{

  /* verwendete Objekte */

  // Anfang Attribute
  private Bildschirm meinBildschirm;
  private Stift meinStift;
  // Ende Attribute



  // Anfang Methoden
  public void zeichneHaus(){

    /* Aufbau der Objekte */
    meinBildschirm=new Bildschirm();
    meinStift=new Stift();
    
    /* Nachrichtenteil */
    meinStift.bewegeBis(100,100);
    meinStift.runter();
    meinStift.bewegeBis(140,100);
    meinStift.bewegeBis(100,60);
    meinStift.dreheBis(60);
    meinStift.bewegeUm(40);
    meinStift.dreheUm(-120);
    meinStift.bewegeUm(40);
    meinStift.bewegeBis(100,60);
    meinStift.bewegeBis(100,100);
    meinStift.bewegeBis(140,60);
    meinStift.bewegeBis(140,100);
    
    /* Objekte freigeben */
    meinStift.gibFrei();
      //meinBildschirm.gibFrei();
  }
  
  public static void main(String[] haus){
    zeichneHaus();
  }
  // Ende Methoden
}
```


----------



## eRaaaa (11. Sep 2010)

http://www.java-forum.org/stichwort...ic-method-cant-referenced-static-context.html

main-Methode = statisch
zeichneHaus(); = nicht statisch

mehr steht in dem Link - in der FAQ sind auch noch weitere Infos zu finden!


----------



## nrg (11. Sep 2010)

musst erst ein object vom Typ Nikolaus instanziieren und dann die Methode mit deinObjName.zeichneHaus() aufrufen.

alternativ zeichneHaus() und die Attribute statisch deklarieren.


----------



## Deniska93 (11. Sep 2010)

nrg hat gesagt.:


> musst erst ein object vom Typ Nikolaus instanziieren und dann die Methode mit deinObjName.zeichneHaus() aufrufen.
> 
> alternativ zeichneHaus() und die Attribute statisch deklarieren.





und wie genau geht das mit dem instanzieren? is das schwer? steh grad iwie aufm schlauch sorry -.-


----------



## nrg (11. Sep 2010)

genauso wie du es mit meinBildschirm und meinStift machst


----------



## Deniska93 (11. Sep 2010)

Also dann einmal oben


```
private Haus meinHaus;
```

und unten unter

```
meinStift=new Stift();
```
einfach ein


```
meinHaus=new Nikolaus();
```

??


----------



## Marcinek (11. Sep 2010)

Du solltest dir ein Javabuch besorgen und diese Grundlagen unbedingt nachlesen.

ein 
	
	
	
	





```
new Nikolaus().zeichneHaus()
```
 reicht aus.

So wie du es beschrieben hast, würde es auch gehen.


----------



## nrg (11. Sep 2010)

Marcinek hat gesagt.:


> So wie du es beschrieben hast, würde es auch gehen.



naja nicht ganz 

machs so:


```
public static void main(String[] args){
    Nikolaus meinHaus = new Nikolaus();
    meinHaus.zeichneHaus();
}
```


----------



## Marcinek (11. Sep 2010)

Ehh ja ;D 
	
	
	
	





```
private static
```
 müsste es sein ^^


----------



## nrg (11. Sep 2010)

```
private static Nikolaus
```
und macht auch wenig sinn, das objekt in zeichneHaus zu instanziieren


----------



## Deniska93 (12. Sep 2010)

Danke Leute, es funktioniert, habe nun sogar verschiedene Arten gefunden das Haus zu zeichnen 

Danke für die viele Hilfe. Hier für andere Leute, die gerne das Haus zeichnen würden die verschiedenen Codes:

HIER VARIANTE 1:
[Java]import sum.kern.*;

public class Nikohaus{

  private Bildschirm bs;         //         -> Bildschirm "bs" nennen
  private Stift st;              //         -> Stift "st" nennen


  // Anfang Methoden

  public void zeichne(){

    bs=new Bildschirm();         //         -> Bildschirm "bs" erzeugen (ohne Angaben)
    st=new Stift();              //         -> Stift "st" erzeugen (ohne Angaben)


    st.bewegeBis(400,400);       //         -> Stift nach unten links bringen
    st.runter();                 //         -> Stift runter
    st.bewegeBis(500,400);       // Das     -> Stift nach unten rechts navigieren
    st.bewegeBis(400,300);       // ist     -> Stift nach oben links navigieren
    st.bewegeBis(450,230);       // das     -> Stift zur Dachspitze navigieren
    st.bewegeBis(500,300);       // Haus    -> Stift nach oben rechts navigieren
    st.bewegeBis(400,300);       // vom     -> Stift nach oben links navigieren
    st.bewegeBis(400,400);       // Ni-     -> Stift nach unten links navigieren
    st.bewegeBis(500,300);       // ko-     -> Stift nach oben rechts navigieren
    st.bewegeBis(500,400);       // laus    -> Stift nach unten rechts navigieren

    st.gibFrei();                //         -> Stift freigeben
  }

  /* Main-Methode (muss vorhanden sein!) in der das Programm
     aufgerufen wird, damit etwas passiert */
  public static void main(String[] args){
    new Nikohaus().zeichne();
  }

  // Ende Methoden
}[/Java]

HIER VARIANTE 2:
[Java]import sum.kern.*;

public class Nikohaus2{
  private Bildschirm meinBildschirm;         // Bildschirm "meinBildschirm" nennen
  private Stift meinStift;                   // Stift "meinStift" nennen


  // Anfang Methoden

  public Nikohaus2(){
    meinBildschirm=new Bildschirm();         // Bildschirm "meinBildschirm" erzeugen (ohne Angaben)
    meinStift=new Stift();                   // Stift "meinStift" erzeugen (ohne Angaben)

    meinStift.bewegeBis(100,300);            // Startposition
    zeichne();                               // Prozedur "zeichne()" aufrufen
    meinStift.dreheUm(-90);                  // Stift um 90° nach rechts drehen
    zeichne();                               // Prozedur "zeichne()" aufrufen
    meinStift.dreheUm(-90);                  // Stift um 90° nach rechts drehen
    zeichne();                               // Prozedur "zeichne()" aufrufen
    meinStift.dreheUm(-90);                  // Stift um 90° nach rechts drehen
    zeichne();                               // Prozedur "zeichne()" aufrufen
    meinStift.dreheUm(-30);                  // Stift um 30° nach rechts drehen
    zeichne();                               // Prozedur "zeichne()" aufrufen
    meinStift.dreheUm(-120);                 // Stift um 120° nach rechts drehen
    zeichne();                               // Prozedur "zeichne()" aufrufen
    meinStift.dreheUm(-75);                  // Stift um 75° nach rechts drehen
    meinStift.runter();                      // Stift runter
    meinStift.bewegeUm(282.8427125);         // Stift bewegen um 282.8427125 (errechnet mittels Pytagoras!)
    meinStift.hoch();                        // Stift hoch
    meinStift.dreheUm(-135);                 // Stift um 135° nach rechts drehen
    zeichne();                               // Prozedur "zeichne()" aufrufen
    meinStift.dreheUm(-135);                 // Stift um 135° nach rechts drehen
    meinStift.runter();                      // Stift runter
    meinStift.bewegeUm(282.8427125);         // Stift bewegen um 282.8427125 (errechnet mittels Pytagoras!)
    meinStift.hoch();                        // Stift hoch
  }

  public void zeichne(){
    meinStift.runter();                      // Stift runter
    meinStift.bewegeUm(200);                 // Stift bewegen um 200
    meinStift.hoch();                        // Stift hoch
  }

  /* Main-Methode (muss vorhanden sein!) in der das Programm
     aufgerufen wird, damit etwas passiert */
  public static void main(String[] args){
    new Nikohaus2();
  }

  // Ende Methoden
}[/Java]


----------

