# Objekt als Parameter übergeben



## Affenfaust (26. Mai 2011)

Hi Leute!
Ich hab eine für die meisten Programmierer wohl ziemlich einfach zu beantwortende Frage: Wie umgehe ich in diesem Fall den " non-static method cannot be referenced from a static context" Fehler?

Ich kann in der Klasse Player kein Objekt der klasse Game erstellen, da sonst immer und immer wieder ein Spielfenster geöffnet wird. Ich denke die Lösung ist, wie der Threadtitel schon andeutet, das Objekt "game" an die Klasse Player zu übergeben. Wie stelle ich das an? Gibt es vllt. auch eine bessere Lösung (Stichwort: reflection)?

Code-snippet "Game":

```
public class Game extends JFrame implements KeyListener{

   /*
   Create a player
          int xPos;    X-Position
          int yPos;    Y-Position
   */
   
   private Player playerLeft;
   private Player playerRight;
   public boolean left=false;
   public boolean right=false;

     
   public Game() {
          setTitle("My Game");
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setSize(600,400);
          setBackground(Color.white);
          setResizable(false);
          addKeyListener(this);
          setVisible(true);
          
          playerLeft=new Player(50,300 );
          playerRight=new Player(530,300);
          
   }
   
   public void paint(Graphics g){
      paintComponent(g);

      repaint();
   }
   
   public void paintComponent(Graphics g){
      playerLeft.draw(g);
      playerLeft.update();
      playerRight.draw(g);
      playerRight.update();
      hitblock1.draw(g);
      hitblock1.update();
   }
   
   @Override
   public void keyPressed(KeyEvent e){
      if(e.getKeyCode() == KeyEvent.VK_LEFT){
         left=true;
      }else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
         right=true;
      }
   }
   
   @Override
   public void keyReleased(KeyEvent e){
   ;
   }
   
   @Override
   public void keyTyped(KeyEvent e){
   ;
   }
   
   public Player getPlayerLeft(){
     return playerLeft;
   }
   
   public void setPlayerLeft(){
     this.playerLeft=playerLeft;
   }
   
   public Player getPlayerRight(){ 
     return playerRight;
   }

   public void setPlayerRight(){
     this.playerRight=playerRight;
   }
   
   public boolean getLeft(){                            <------!
     return left;
   }
   
   public void setLeft(){
     this.left=left;
   }
   
   public boolean getRight(){                           <---------!!
     return right;
   }

   public void setRight(){
     this.right=right;
   }
   
   public static void main( String args[]){
     Game game = new Game();
   }
}
```

Code-snippet "Player":

```
public class Player extends GameObject{

   public Player(final int xPos, final int yPos){
      this.xPos=xPos;
      this.yPos=yPos;
   }
   
   @Override
   public void draw(Graphics g){
      g.drawRect(xPos,yPos,10,40);
   }

   @Override
   public void update(){
   
     if(Game.getLeft()==true){                          <------!!
        System.out.println("left"); 
     }
     else if(Game.getRight()==true);{                 <-----!!
        System.out.println("right");
     }
   }
}
```

Das ist mein erstes Projekt, bin also für jede Hilfe dankbar. ;D

Cheers, Affenfaust


----------



## eRaaaa (26. Mai 2011)

Schau mal in die FAQ:
http://www.java-forum.org/stichwort...ic-method-cant-referenced-static-context.html + die anderen static Threads!

 public boolean getLeft(){    <-- *keine* statische Methode
Game.getLeft() <-- statischer Aufruf! 

Du brauchst ein Game-Objekt!


----------



## Affenfaust (26. Mai 2011)

Danke für die super-schnelle Antwort,doch leider hilft sie mir nicht weiter. Mir ist bekannt, wieso dieser Fehler auftritt und wie man ihn normalerweise lösen würde, doch in diesem Fall kann ich kein game Objekt erstellen, da sonst eine neue Instanz des Spiels gestartet werden würde.
cheers, Affenfaust


----------



## Gast2 (26. Mai 2011)

Dem Player kannst du z.B. das Game mitgeben:


```
playerLeft=new Player(50,300,this );
          playerRight=new Player(530,300,this);
```




```
public class Player extends GameObject{

   private Game game;

   public Player(final int xPos, final int yPos, Game game){
      this.xPos=xPos;
      this.yPos=yPos;
      this.game=game;
   }
   
   @Override
   public void draw(Graphics g){
      g.drawRect(xPos,yPos,10,40);
   }
 
   @Override
   public void update(){
   
     if(game.getLeft()==true){                          <------!!
        System.out.println("left"); 
     }
     else if(game.getRight()==true);{                 <-----!!
        System.out.println("right");
     }
   }
}
```


----------



## Nanny McPhie (26. Mai 2011)

hei
bitte kann nochmal jemand bei mir gucken ich brauch das für morgen :,(


----------



## Suinos (26. Mai 2011)

Hast du fassys post gelesen?
Da steht doch schon die ganze Lösung!


----------

