Nullpointer. :(

tom2208

Mitglied
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:
Java:
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:
Code:
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:
Java:
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:
Java:
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;
    
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
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

Mitglied
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)

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! :)
 
Zuletzt bearbeitet von einem Moderator:

tom2208

Mitglied
Eine frage noch ^^' wieso passiert nichts wenn ich drauf drücke? :/
hier mein keylistener
Java:
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;
    }
}
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
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.


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

Mitglied
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:
Code:
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:
Java:
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();            
            }    
        }    
    }
}
 
Zuletzt bearbeitet:

Joose

Top Contributor
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)

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

Mitglied
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 :)


Code:
   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

Top Contributor
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):
Java:
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

Super-Moderator
Mitarbeiter
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

Mitglied
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):
Java:
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.
ne er zeichnet die danach.
 

Joose

Top Contributor
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:
Java:
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

Mitglied
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:
Code:
...
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:
Java:
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:
Java:
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

Top Contributor
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

Super-Moderator
Mitarbeiter
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

Mitglied
Hinweis:
Bitte verwende die Möglichkeit deine Post zu bearbeiten und vermeide Doppelposts.
okey keine doppelposts mehr ;D

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 ;)
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.
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
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

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Kann ich die Nullpointer Exception umgehen Allgemeine Java-Themen 12
D Nullpointer Exception Problem Allgemeine Java-Themen 5
Kirby.exe Nullpointer Exception bei Queue Allgemeine Java-Themen 5
N Compiler-Fehler Warum erhalte ich einen Nullpointer Fehler? Allgemeine Java-Themen 2
M javafx ComboBox- Nullpointer Exception Allgemeine Java-Themen 6
0 Animiertes Gif anzeigen - NullPointer Exception Allgemeine Java-Themen 19
L Nullpointer Exceptions werden nicht angezeigt Allgemeine Java-Themen 5
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
I NullPointer während while(){} Allgemeine Java-Themen 4
G Nullpointer trotz vorherigem Nullcheck Allgemeine Java-Themen 2
V Array aus Instanzen, NullPointer Allgemeine Java-Themen 4
E YQL Api Test - NullPointer Allgemeine Java-Themen 9
A Compiler-Fehler Woher kommt der NullPointer? (Collections & Iterator) Allgemeine Java-Themen 7
D Nullpointer abfangen Allgemeine Java-Themen 7
B Nullpointer Exception in Array Allgemeine Java-Themen 15
H NullPointer finde den grund nicht Allgemeine Java-Themen 9
Z NullPointer in einem VO Allgemeine Java-Themen 14
M Nullpointer Exeption bei String Array Allgemeine Java-Themen 9
A NullPointer bei System.getProperty("file.seperator") Allgemeine Java-Themen 4
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
medic NullPointer verwirrt mich total. Allgemeine Java-Themen 3
G NullPointer. in einer Datenstruktur Allgemeine Java-Themen 2
H Nullpointer exception, Attribute in Label schreiben? Allgemeine Java-Themen 4
G Nullpointer Exception nach KeyPressed Allgemeine Java-Themen 6
G NullPointer ? wieso? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben