# Nullpointer. :(



## tom2208 (15. Mrz 2016)

Finde den Fehler einfach nicht. Habe wein Menü für ein spiel gemacht doch sobald ich die Buttons einfügte bekam ich eine Nullpointer. die Konsole hat mir die Zeilen mit dem fehller ausgegeben indem die Buttons in der for schleife gedrawt && geupdated werden.

CODE:

frame:

```
private BufferStrategy strat;
 
    public frame(){
     
        super("SasiJump");
     
    }
 
    public void makestrat(){
     
        createBufferStrategy(2);
        strat = getBufferStrategy();
     
    }
 
    public void repaint(){
     
        Graphics g = strat.getDrawGraphics();
        draw(g);
        g.dispose();
        strat.show();
     
    }

    public static void draw(Graphics g) {

        if(main.stat.equalsIgnoreCase("menu")){
         
            Menu.draw(g);
         
        }
     
    }
 
    public static void update(float tslf){
     
        if(main.stat.equalsIgnoreCase("menu")){
         
            Menu.update(tslf);
         
        }else{
         
            Level.update(tslf);
         
        }
     
    }
 
}
```
menu:

```
package main;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class Menu {

    private static Button[] buttons;
    static BufferedImage background = ImageLoader.loadImage("menu_background");
    static BufferedImage title = ImageLoader.loadImage("title");
    static BufferedImage button_unpressed = ImageLoader.loadImage("button");
    static BufferedImage button_pressed = ImageLoader.loadImage("button_clicked");
    static BufferedImage button_mouseover = ImageLoader.loadImage("button");

 
    public Menu(){
     
        buttons = new Button[3];
     
        BufferedImage[] textures = {button_unpressed, button_mouseover, button_pressed};
        Font f = new Font("SansSerif", 0 , 30);
     
        buttons[0] = new Button(200, "Play", textures, f);
        buttons[1] = new Button(350, "Options", textures, f);
        buttons[2] = new Button(500, "Exit", textures, f);
     
    }
 
    public static void draw(Graphics g){
     
        g.drawImage(background, 0, 0, main.WIDTH, main.HEIGHT, null);
        g.drawImage(title, 100, 50, 600, 200, null);
     
        for(int i = 0; i < buttons.length ; i++){
         
            buttons[i].draw(g);
         
        }
     
    }
 
    public static void update(float tslf){
     
        for(int i = 0; i < buttons.length; i++){
         
        if(buttons[i].update()){
             
                if(i == 0) main.stat = "levelmenu";
                else if (i == 1);
                else if (i == 2) System.exit(0);
         
             
            }
         
        }
     
    }
 
}
```
collision:

```
package main;

public class Collision {

    public static boolean rectToRect(float rect1x, float rect1y, int width1, int height1,
            float rect2x, float rect2y, int width2, int height2){
     
        if(rect1x <= rect2x + width2 && rect1x + width1 >= rect2x && rect1y <= rect2y + height2 && rect1y + height1 >= rect2y) return true;
     
        return false;
    }
 
}
```
Button:

```
package main;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class Button {
    private int x;
    private int y;
    private Font font;
    private FontMetrics fm;
    private String name;
    private int isPressed;
    private BufferedImage[] look;
    public Button(int y, String name, BufferedImage[] look, Font font){
    
        this.y = y;
        this.name = name;
        this.look = look;
        this.font = font;
    
        x = 400 - look[0].getWidth()/2;
    
    }
    public void draw(Graphics g){
    
        g.setFont(font);
        fm = g.getFontMetrics();
        g.drawImage(look[isPressed], x, y, null);
        g.setColor(Color.BLACK);
        g.drawString(name, x + look[isPressed].getWidth() /2 - fm.stringWidth(name)/2, y + look[isPressed].getHeight()/2 + font.getSize()/2);
    }
    public boolean update(){
    
        if(Keyboard.getButton() != 1&& isPressed == 2){
        
            isPressed = 2;
            return true;
        }
    
        isPressed = 0;
        int mx = Keyboard.getMouseX();
        int my = Keyboard.getMouseY();
    
        if(Collision.rectToRect(mx, my, 0 ,0 ,x ,y, look[isPressed].getWidth(), look[isPressed].getHeight())){
        
            if(Keyboard.getButton() == 1) isPressed = 2;
            else isPressed = 1;
        }
    
        return false;
    
    }
}
```


----------



## Flown (15. Mrz 2016)

Zeig doch mal den StackTrace her.


----------



## tom2208 (15. Mrz 2016)

Flown hat gesagt.:


> Zeig doch mal den StackTrace her.


sorry kenn mich nicht sonderlich gut mit den begriffen aus '^^



Flown hat gesagt.:


> Zeig doch mal den StackTrace her.


meinstr du die fehlermeldung?.. klar meinst du das..


----------



## Jardcore (15. Mrz 2016)

Die Fehlermeldung die du bekommst wenn du siehst das du einen NullPointerException hast


----------



## mrBrown (15. Mrz 2016)

Deine draw() in Menu ist static, die Buttons werden aber im Konstruktor von Menu erstellt.
Wenn du also draw() aufrufst, ohne mit new ein Menu zu erstellt zu haben, enthält dein ButtonArray noch keine Buttons. 

Du solltest die Methoden im Menu alle nicht static machen, und dann im frame ein Menu-Objekt erstellen, und damit arbeiten.


----------



## tom2208 (15. Mrz 2016)

Exception in thread "main" java.lang.NullPointerException
    at main.Menu.draw(Menu.java:35)
    at main.frame.draw(frame.java:38)
    at main.frame.repaint(frame.java:28)
    at main.main.main(main.java:39)



mrBrown hat gesagt.:


> Deine draw() in Menu ist static, die Buttons werden aber im Konstruktor von Menu erstellt.
> Wenn du also draw() aufrufst, ohne mit new ein Menu zu erstellt zu haben, enthält dein ButtonArray noch keine Buttons.
> 
> Du solltest die Methoden im Menu alle nicht static machen, und dann im frame ein Menu-Objekt erstellen, und damit arbeiten.


ich versuch es, vielen Dank!


----------



## tom2208 (15. Mrz 2016)

Eine frage noch ^^' wieso passiert nichts wenn ich drauf drücke? :/
hier mein keylistener

```
package main;

import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;

public class Keyboard {
    private static int mousex;
    private static int mousey;
    private static int button;
  
    private static boolean[] keys = new boolean[1024];
  
    public static int getMouseY(){
        return mousey;
    }
  
    public static int getMouseX(){
        return mousex;
    }
  
    public static int getButton(){
        return button;
    }
  
    public static boolean isKeyPressed(int keycode){
        return keys[keycode];
    }
  
    public void keyPressed(KeyEvent e) {
        keys[e.getKeyCode()] = true;
    }

    public void keyReleased(KeyEvent e) {
        keys[e.getKeyCode()] = false;
    }

    public void keyTyped(KeyEvent e) {
    }

    public void mouseDragged(MouseEvent e) {
    }

    public void mouseMoved(MouseEvent e) {
        mousex = e.getX();
        mousey = e.getY();
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        button = e.getButton();
    }

    public void mouseReleased(MouseEvent e) {
        button = -1;
    }
}
```


----------



## tom2208 (15. Mrz 2016)

Wenn ich auf den Button Exit drücke schließt sich das Fenster nicht und die textur wird auch nicht geändert


----------



## mrBrown (15. Mrz 2016)

tom2208 hat gesagt.:


> Eine frage noch ^^' wieso passiert nichts wenn ich drauf drücke? :/
> hier mein keylistener



Weil das kein Keylistener ist und du den auch nirgendwo als Listener zuweist. Damits ein Listener ist, musst du das passende Interface implementieren und den irgendwo zuweisen.




tom2208 hat gesagt.:


> Wenn ich auf den Button Exit drücke schließt sich das Fenster nicht und die textur wird auch nicht geändert


Da müsste man raten, ohne entsprechendes Codestück...


----------



## tom2208 (15. Mrz 2016)

mrBrown hat gesagt.:


> Weil das kein Keylistener ist und du den auch nirgendwo als Listener zuweist. Damits ein Listener ist, musst du das passende Interface implementieren und den irgendwo zuweisen.
> 
> 
> 
> Da müsste man raten, ohne entsprechendes Codestück...


okey danke erstmal  ich komme auf euch zurück wenn ich weiter fragen oder probleme habe


----------



## tom2208 (15. Mrz 2016)

es funktioniert alles nach dem befolgen euerer tipps  <3


----------



## tom2208 (15. Mrz 2016)

Nächstes Problem 

Währe echt nett wenn ihr mir helfen würdet 

Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
    at main.Level.draw(Level.java:44)
    at main.frame.draw(frame.java:61)
    at main.frame.repaint(frame.java:47)
    at main.main.main(main.java:42)

level:

```
package main;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.LinkedList;

public class Level {
  
    private float worldx;
    private float worldy;
    private float oldworldx;
    private float oldworldy;
    private Tile[] [] tiles;
    private BufferedImage img = ImageLoader.loadImage("map1");
    private int width = img.getHeight();
    private int height = 25;
    private int level = 1;
  
    public Level(){
      
      
    }
  
    public void draw(Graphics g){
      
        oldworldx = worldx;
        oldworldy = worldy;
      
        boolean onwallx = false;
        boolean onwally = false;
      
        int minx = (int) (worldx/20);
        int maxx = (int) ((worldx + 800)/20) + 1;
        int miny = (int) (worldy/20);
        int maxy = (int) ((worldy + 600)/20) + 1;
      
        if(maxx > width) maxx = width;
        if(maxy > height) maxy = height;
      
      //Hier ist der Fehler
        for(int x = minx; x < maxx; x++){
              
            for(int y = miny; y < maxy; y++){
              
                    tiles[x] [y].draw(g, (int) worldx * -1,(int) worldy * -1);
      
            }
          
        }
      // laut console
if(worldx < 0){
          
            worldx = 0;
            onwallx = true;
          
        }
      
        if(worldy< 0){
          
            worldy = 0;
            onwally = true;
          
        }
      
        int mapwidth = width * 20;
        int mapheight = height * 20;
      
        if(worldx > mapwidth - main.WIDTH){
          
            worldx = mapwidth - main.WIDTH;
            onwallx = true;
              
        }
      
        if(worldy > mapheight - main.HEIGHT){
          
            worldy = mapheight - main.HEIGHT;
            onwally = true;
          
        }
      
    }
  
    public void update(float tslf){
      
        loadNextLevel();
      
    }
  
    public void loadNextLevel(){
      
        BufferedImage map = ImageLoader.loadImage("map" + level);
      
        width = map.getWidth();
        height = 25;
      
        tiles = new Tile[width] [height];
      
        for(int x = 0; x < width; x++){
          
            for(int y = 0; y < height; y++){
              
                Color c = new Color(map.getRGB(x, y));
              
                //grass
                if(c.getRed() == 0 && c.getBlue() == 0 && c.getGreen() == 255) tiles[x] [y] = new Tile(x,y,0);
                //stone
                if(c.getRed() == 100 && c.getBlue() == 100 && c.getGreen() == 100) tiles[x] [y] = new Tile(x,y,1);
                //itemblock
                if(c.getRed() == 255 && c.getBlue() == 0 && c.getGreen() == 255) tiles[x] [y] = new Tile(x,y,2);
                //brick
                if(c.getRed() == 255 && c.getBlue() == 0 && c.getGreen() == 0) tiles[x] [y] = new Tile(x,y,3);
                //sweets
                if(c.getRed() == 255 && c.getBlue() == 255 && c.getGreen() == 255) tiles[x] [y] = new Tile(x,y,4);
                //dirt
                if(c.getRed() == 100 && c.getBlue() == 20 && c.getGreen() == 50) tiles[x] [y] = new Tile(x,y,5);
                //air
                if(c.getRed() == 100 && c.getBlue() == 20 && c.getGreen() == 50) tiles[x] [y] = new Tile(x,y,100);

            }
          
        }
```

ich habe ein Bild und lese die einzelnen pixel aus je nach farbe soll nun eine level in diesem spiel gezeichnet werden, doch hab ich da ein paar probleme

hier die main:

```
package main;

import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class main {
    static String stat = "menu";
    static int loadedLevel = 1;

    static int tilesize = 20;

    public static int HEIGHT = 600;
    public static int WIDTH = 800;

    static BufferedImage icon = ImageLoader.loadImage("icon");

    public static void main(String[] args){    
        System.out.println("Laoding Frame..");
        frame frame = new frame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        frame.setIconImage(icon);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setVisible(true);
    
        frame.makestrat();
    
        long lastFrame = System.currentTimeMillis();
    
        while(true){        
            long thisFrame = System.currentTimeMillis();
            float timSinceLastFrame = (float) ((thisFrame - lastFrame)/1000.0);
            lastFrame = thisFrame;
        
            frame.update(timSinceLastFrame);
        
            frame.repaint();
        
            try{            
                Thread.sleep(10);            
            }catch(InterruptedException e){            
                e.printStackTrace();            
            }    
        }    
    }
}
```


----------



## Joose (15. Mrz 2016)

tom2208 hat gesagt.:


> Fehlermeldung:
> Exception in thread "main" java.lang.NullPointerException
> at main.Level.draw(Level.java:44)
> at main.frame.draw(frame.java:61)
> ...



Der StackTrace verrät dir genau die Datei und Zeile wo der Fehler auftritt.
Du hast zwar die passende Klasse gepostet aber ich habe eigentlich keine Lust nun abzuzählen welche Zeile 44 ist.
Bitte sei so nett und sag uns auch um welche Zeile es sich hierbei handelt 

EDIT: Und vermeide Doppelposts, du solltest die Möglichkeit haben einen Beitrag zu editieren


----------



## tom2208 (15. Mrz 2016)

Joose hat gesagt.:


> Der StackTrace verrät dir genau die Datei und Zeile wo der Fehler auftritt.
> Du hast zwar die passende Klasse gepostet aber ich habe eigentlich keine Lust nun abzuzählen welche Zeile 44 ist.
> Bitte sei so nett und sag uns auch um welche Zeile es sich hierbei handelt
> 
> EDIT: Und vermeide Doppelposts, du solltest die Möglichkeit haben einen Beitrag zu editieren


 


```
for(int x = minx; x < maxx; x++){            
            for(int y = miny; y < maxy; y++){            
                    tiles[x] [y].draw(g, (int) worldx * -1,(int) worldy * -1);    
            }        
        }
```
um die hier
habe es auch nochmal im code sichtbargemacht


----------



## Joose (15. Mrz 2016)

Der Fehler passiert in einer Zeile, du zeigst uns hier wieder mehrere 
Ich nehme an Zeile 44 ist diese hier (die anderen können keine NullPointerException erzeugen):

```
tiles[x] [y].draw(g, (int) worldx * -1,(int) worldy * -1);
```
Du initialisiert "tiles" zwar im "loadNextLevel" aber ich nehme an diese Methode wird erst aufgerufen nachdem "draw" aufgerufen wird. Sprich "tiles" ist zu diesem Zeitpunkt noch nicht initialisiert -> null.


----------



## mrBrown (15. Mrz 2016)

Naja, da wird wohl tiles[x][y] null sein, also entweder ist das Array noch nicht initialisiert, oder du weißt einer Stelle keinen Wert zu.


----------



## tom2208 (16. Mrz 2016)

Joose hat gesagt.:


> Der Fehler passiert in einer Zeile, du zeigst uns hier wieder mehrere
> Ich nehme an Zeile 44 ist diese hier (die anderen können keine NullPointerException erzeugen):
> 
> ```
> ...


ne er zeichnet die danach.


----------



## Joose (16. Mrz 2016)

Dann ist zwar das Array "tiles" initialisiert, aber das Array ist noch leer! Und mit dem Indexes "x" und "y" greifst du dann auf nichts zu und willst von nichts die Methode draw aufrufen.


EDIT:

```
Type[] nameDerVariable = new Type[länge des Arrays]
```
Mit diesem Code wird nur ein Array Objekt angelegt, den Inhalt muss man extra anlegen. Eine Ausnahme bildet ein Array eines primitiven Datentyps, dort gibt es Defaultwerte.


----------



## tom2208 (16. Mrz 2016)

Habe jetzt die Klasse Level nachmal neu geschrieben und LevelLoader genannt:
er bricht beim Zeichnen einfach ab, es kommt ein Nullpointer. es wird bis dahin auch ncihts gerendert es bleibt das alte menü,wenn ich das fenster jedoch an den rand schiebe wir dieser teil weiß :/

Konsole:

```
...
Loading Tiles 78 ; 15
Put Tile in Array x:78 y:15
Loading Tiles 78 ; 16
Put Tile in Array x:78 y:16
Loading Tiles 78 ; 17
Put Tile in Array x:78 y:17
Loading Tiles 78 ; 18
Put Tile in Array x:78 y:18
Loading Tiles 78 ; 19
Put Tile in Array x:78 y:19
Loading Tiles 78 ; 20
Put Tile in Array x:78 y:20
Loading Tiles 78 ; 21
Put Tile in Array x:78 y:21
Loading Tiles 78 ; 22
Put Tile in Array x:78 y:22
Loading Tiles 78 ; 23
Put Tile in Array x:78 y:23
Loading Tiles 78 ; 24
Put Tile in Array x:78 y:24
Loading Tiles 79 ; 0
Put Tile in Array x:79 y:0
Loading Tiles 79 ; 1
Put Tile in Array x:79 y:1
Loading Tiles 79 ; 2
Put Tile in Array x:79 y:2
Loading Tiles 79 ; 3
Put Tile in Array x:79 y:3
Loading Tiles 79 ; 4
Put Tile in Array x:79 y:4
Loading Tiles 79 ; 5
Put Tile in Array x:79 y:5
Loading Tiles 79 ; 6
Put Tile in Array x:79 y:6
Loading Tiles 79 ; 7
Put Tile in Array x:79 y:7
Loading Tiles 79 ; 8
Put Tile in Array x:79 y:8
Loading Tiles 79 ; 9
Put Tile in Array x:79 y:9
Loading Tiles 79 ; 10
Put Tile in Array x:79 y:10
Loading Tiles 79 ; 11
Put Tile in Array x:79 y:11
Loading Tiles 79 ; 12
Put Tile in Array x:79 y:12
Loading Tiles 79 ; 13
Put Tile in Array x:79 y:13
Loading Tiles 79 ; 14
Put Tile in Array x:79 y:14
Loading Tiles 79 ; 15
Put Tile in Array x:79 y:15
Loading Tiles 79 ; 16
Put Tile in Array x:79 y:16
Loading Tiles 79 ; 17
Put Tile in Array x:79 y:17
Loading Tiles 79 ; 18
Put Tile in Array x:79 y:18
Loading Tiles 79 ; 19
Put Tile in Array x:79 y:19
Loading Tiles 79 ; 20
Put Tile in Array x:79 y:20
Loading Tiles 79 ; 21
Put Tile in Array x:79 y:21
Loading Tiles 79 ; 22
Put Tile in Array x:79 y:22
Loading Tiles 79 ; 23
Put Tile in Array x:79 y:23
Loading Tiles 79 ; 24
Put Tile in Array x:79 y:24
Create frame buffer..
draw: 0 0
draw: 0 1
draw: 0 2
draw: 0 3
draw: 0 4
draw: 0 5
draw: 0 6
draw: 0 7
draw: 0 8
draw: 0 9
draw: 0 10
draw: 0 11
draw: 0 12
draw: 0 13
draw: 0 14
draw: 0 15
draw: 0 16
draw: 0 17
draw: 0 18
draw: 0 19
draw: 0 20
draw: 0 21
draw: 0 22
draw: 0 23
draw: 0 24
draw: 1 0
draw: 1 1
draw: 1 2
draw: 1 3
draw: 1 4
draw: 1 5
draw: 1 6
draw: 1 7
draw: 1 8
draw: 1 9
draw: 1 10
draw: 1 11
draw: 1 12
draw: 1 13
draw: 1 14
draw: 1 15
draw: 1 16
draw: 1 17
draw: 1 18
draw: 1 19
draw: 1 20
draw: 1 21
draw: 1 22
draw: 1 23
draw: 1 24
draw: 2 0
draw: 2 1
draw: 2 2
draw: 2 3
draw: 2 4
draw: 2 5
draw: 2 6
draw: 2 7
draw: 2 8
draw: 2 9
draw: 2 10
draw: 2 11
draw: 2 12
draw: 2 13
draw: 2 14
draw: 2 15
draw: 2 16
draw: 2 17
draw: 2 18
draw: 2 19
draw: 2 20
draw: 2 21
draw: 2 22
draw: 2 23
draw: 2 24
draw: 3 0
draw: 3 1
draw: 3 2
draw: 3 3
draw: 3 4
draw: 3 5
draw: 3 6
draw: 3 7
draw: 3 8
draw: 3 9
draw: 3 10
draw: 3 11
draw: 3 12
draw: 3 13
draw: 3 14
draw: 3 15
draw: 3 16
draw: 3 17
draw: 3 18
draw: 3 19
draw: 3 20
draw: 3 21
draw: 3 22
draw: 3 23
draw: 3 24
draw: 4 0
draw: 4 1
draw: 4 2
draw: 4 3
draw: 4 4
draw: 4 5
draw: 4 6
draw: 4 7
draw: 4 8
draw: 4 9
draw: 4 10
draw: 4 11
draw: 4 12
draw: 4 13
draw: 4 14
draw: 4 15
draw: 4 16
draw: 4 17
draw: 4 18
draw: 4 19
draw: 4 20
draw: 4 21
draw: 4 22
draw: 4 23
draw: 4 24
draw: 5 0
draw: 5 1
draw: 5 2
draw: 5 3
draw: 5 4
draw: 5 5
draw: 5 6
draw: 5 7
draw: 5 8
draw: 5 9
draw: 5 10
draw: 5 11
draw: 5 12
draw: 5 13
draw: 5 14
draw: 5 15
draw: 5 16
draw: 5 17
draw: 5 18
draw: 5 19
draw: 5 20
draw: 5 21
draw: 5 22
draw: 5 23
draw: 5 24
draw: 6 0
draw: 6 1
draw: 6 2
draw: 6 3
draw: 6 4
draw: 6 5
draw: 6 6
draw: 6 7
draw: 6 8
draw: 6 9
draw: 6 10
draw: 6 11
draw: 6 12
draw: 6 13
draw: 6 14
draw: 6 15
draw: 6 16
draw: 6 17
draw: 6 18
draw: 6 19
draw: 6 20
draw: 6 21
Exception in thread "main" java.lang.NullPointerException
    at main.LevelLoader.draw(LevelLoader.java:65)
    at main.frame.draw(frame.java:61)
    at main.frame.repaint(frame.java:47)
    at main.main.main(main.java:43)
```

LevelLoader:

```
package main;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class LevelLoader {
  
    Tile[][] tiles;
    int height = 25;
    int width = 80;
    int worldx = 0;
    int worldy = 0;
  
    public LevelLoader(){
      
        createTiles();
      
    }
  
    private void createTiles(){
                  
            BufferedImage map = ImageLoader.loadImage("map1");
          
            width = map.getWidth();
            height = 25;
          
            tiles = new Tile[width] [height];
          
            for(int x = 0; x < width; x++){
              
                for(int y = 0; y < height; y++){
                  
                    Color c = new Color(map.getRGB(x, y));
                  
                    //grass
                    if(c.getRed() == 0 && c.getBlue() == 0 && c.getGreen() == 255) tiles[x] [y] = new Tile(x,y,0);
                    //stone
                    if(c.getRed() == 100 && c.getBlue() == 100 && c.getGreen() == 100) tiles[x] [y] = new Tile(x,y,1);
                    //itemblock
                    if(c.getRed() == 255 && c.getBlue() == 0 && c.getGreen() == 255) tiles[x] [y] = new Tile(x,y,2);
                    //brick
                    if(c.getRed() == 255 && c.getBlue() == 0 && c.getGreen() == 0) tiles[x] [y] = new Tile(x,y,3);
                    //sweets
                    if(c.getRed() == 255 && c.getBlue() == 255 && c.getGreen() == 255) tiles[x] [y] = new Tile(x,y,4);
                    //dirt
                    if(c.getRed() == 100 && c.getBlue() == 20 && c.getGreen() == 50) tiles[x] [y] = new Tile(x,y,5);
                    //air
                    if(c.getRed() == 100 && c.getBlue() == 20 && c.getGreen() == 50) tiles[x] [y] = new Tile(x,y,100);
              
                    System.out.println("Put Tile in Array x:" + x + " y:" + y );
                  
            }
          
        }
      
      
    }
  
    void draw(Graphics g){
      
        for(int x = 0; x < width; x++){
            for(int y = 0; y < height; y++){
              
        //hier ist der Fehler        tiles[x][y].draw(g, worldx, worldy);
                System.out.println("draw: " + x + " " + y);
              
            }
          
        }
      
      
    }
  
  
  
  
}
```

Level:

```
package main;

import java.awt.Graphics;
import java.awt.event.KeyListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferStrategy;
import java.awt.event.KeyEvent;



import javax.swing.JFrame;

import RPGMain.Keyboard;


public class frame extends JFrame{
  
    private BufferStrategy strat;
    static Menu menu = new Menu();
    static LevelLoader level = new LevelLoader();
  
    public frame(){
      
        super("SasiJump");
      
        Keyboard kb = new Keyboard();
        addKeyListener(kb);
        addMouseMotionListener(kb);
        addMouseListener(kb);
      
        addKeyListener(new Keyboard());
      
      
    }
  
    public void makestrat(){
      
        createBufferStrategy(2);
        strat = getBufferStrategy();
      
    }
  
    public void repaint(){
      
        Graphics g = strat.getDrawGraphics();
        draw(g);
        g.dispose();
        strat.show();
      
    }

    public static void draw(Graphics g) {

        if(main.stat.equalsIgnoreCase("menu")){
          
            menu.draw(g);
          
        }else{
          
            level.draw(g);
          
        }
      
    }
  
    public static void update(float tslf){
      
        if(main.stat.equalsIgnoreCase("menu")){
          
            menu.update(tslf);
          
        }
    }
  
}
```


----------



## Joose (16. Mrz 2016)

tom2208 hat gesagt.:


> er bricht beim Zeichnen einfach ab, es kommt ein Nullpointer.



Wie schon oben geschrieben. Du initialisierst zwar das Array, dieses ist dann aber leer.
In der Methode "draw" greifst du dann auf ein nicht vorhandenes Tiles zu.

Hinweis:
Bitte verwende die Möglichkeit deine Post zu bearbeiten und vermeide Doppelposts.
Du brauchst nicht immer die kompletten Klassen zu posten, reduziere sie auf den relevanten Code. So ersparst du dir Kopierarbeit und wir müssen uns nicht durch "Unmengen an Code" wühlen


----------



## mrBrown (16. Mrz 2016)

Vermutlich trifft für einen Wert keins der if's zu. Du könntest da mit'm Debugger durchgehen oder if-else raus machen, und um letzten else Standardwerte zuweisen oder ne Exception schmeißen.


----------



## tom2208 (16. Mrz 2016)

Joose hat gesagt.:


> Hinweis:
> Bitte verwende die Möglichkeit deine Post zu bearbeiten und vermeide Doppelposts.


okey keine doppelposts mehr ;D



Joose hat gesagt.:


> Wie schon oben geschrieben. Du initialisierst zwar das Array, dieses ist dann aber leer.
> In der Methode "draw" greifst du dann auf ein nicht vorhandenes Tiles zu.
> 
> Hinweis:
> ...


ich gebe es mir ja per Konsole aus das ich die einzelnen tiles ins array rein tue und er stoppt bei zeichnen das entnehme ich wiederum der Konsole bei x6 y22 ca.


----------



## mrBrown (16. Mrz 2016)

tom2208 hat gesagt.:


> ich gebe es mir ja per Konsole aus das ich die einzelnen tiles ins array rein tue und er stoppt bei zeichnen das entnehme ich wiederum der Konsole bei x6 y22 ca.


Du gibst nicht aus, welche Teils du in's array tust.
Wenn kein if zutrifft, wird nichts zugewiesen, du gibst aber trotzdem aus, das eins zugewiesen wurde.


----------



## Joose (16. Mrz 2016)

tom2208 hat gesagt.:


> okey keine doppelposts mehr ;D



Wie war das mit den Doppelposts? 

Genau wie mrBrown es sagt, irgendein Index wird nicht gefüllt weil keine der Bedingungen zutrifft.
Füge um die Ausgabe eine Bedingung hinzu die prüft ob am entsprechenden Index ein Objekt ist (also != null). Sollte ein Objekt vorhanden sein dann kannst du deine Ausgabe machen, sollte kein Objekt vorhanden sein dann wirf eine Exception oder schreibe eben eine Fehlermeldung hin.


----------



## tom2208 (16. Mrz 2016)

mrBrown hat gesagt.:


> Vermutlich trifft für einen Wert keins der if's zu. Du könntest da mit'm Debugger durchgehen oder if-else raus machen, und um letzten else Standardwerte zuweisen oder ne Exception schmeißen.


hab ich schon ausprobiert funktioniert trotzdem nicht


----------



## Joose (16. Mrz 2016)

tom2208 hat gesagt.:


> hab ich schon ausprobiert funktioniert trotzdem nicht



"funktioniert nicht" ist keine Fehlerbeschreibung.
Was hast du probiert? (etwas code zeigen)
Und was war das Ergebnis? Gleicher Fehler? Problem nur woanders?


----------



## tom2208 (16. Mrz 2016)

Joose hat gesagt.:


> "funktioniert nicht" ist keine Fehlerbeschreibung.
> Was hast du probiert? (etwas code zeigen)
> Und was war das Ergebnis? Gleicher Fehler? Problem nur woanders?


ich habe eine else mit dran gehungen und es war genau der gleiche fehler


----------



## mrBrown (16. Mrz 2016)

Zeig doch mal mit Code, wo du ein else drangehängt hast


----------



## Joose (16. Mrz 2016)

Gut wo hast du das "else" angehängt und welcher Code stand im "else" drinnen?


----------



## tom2208 (16. Mrz 2016)

Joose hat gesagt.:


> Gut wo hast du das "else" angehängt und welcher Code stand im "else" drinnen?


habe es auf eine andere weise gelöst die war mir zu komplitiert. Viel Danke für eure Hilfe


----------



## Joose (16. Mrz 2016)

Wie hast du es denn nun gelöst?


----------



## tom2208 (16. Mrz 2016)

Joose hat gesagt.:


> Wie hast du es denn nun gelöst?


habe nun einfach ein bild genommen das bewegt wird und die einzelnen blöcke in ner xml gespeichert, das funktioniert dann alles über einen editor. Das mit den Tiles mach irgandwann nochmal neu wenn ich damit ein bisschen mehr erfahrungen gemacht habe


----------

