2014-11-23 3 views
0

я продолжаю получать java.lang.NullPointerException на этот код:Почему я получаю java.lang.NullPointerException

private void render(){ 
    BufferStrategy bs = this.getBufferStrategy(); 
    if(bs == null){ 
     this.createBufferStrategy(3); 
    } 

    Graphics g = bs.getDrawGraphics(); 

    g.dispose(); 
    bs.show(); 
} 

Может кто-нибудь сказать, что я делаю не так?

+1

Если 'bs' имеет нулевое значение, вы ожидаете какую-то часть этого кода, чтобы сделать это не нулевой ? – user2357112

+0

this.createBufferStrategy (3); – swingBoris

+0

@swingBoris: Как вы ожидаете, что изменить 'bs'? – SLaks

ответ

2

Вы должны попробовать это:

private void render(){ 
    BufferStrategy bs = this.getBufferStrategy(); 
    if(bs == null){ 
     this.createBufferStrategy(3); 
     bs = this.getBufferStrategy(); // reassign bs 
    } 

    Graphics g = bs.getDrawGraphics(); 

    g.dispose(); 
    bs.show(); 
} 
+1

['createBufferStrategy' возвращает void] (https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#createBufferStrategy%28int%29). – Tom

+0

@Tom я отредактировал мой ответ – mabbas

3

Даже когда вы называете this.createBufferStrategy(3); ваш bs переменная остается не.

Вы должны прочитать его обратно после его создания:

if(bs == null){ 
    this.createBufferStrategy(3); 
    bs = this.getBufferStrategy(); 
} 

Это хорошая идея, чтобы добавить проверку, чтобы убедиться, что после вызова createBufferStrategy вы получите обратно непустой:

this.createBufferStrategy(3); 
bs = this.getBufferStrategy(); 
if (bs == null) throw new IllegalStateException("Buffered structure is not created."); 
1

Вы забываете назначить новую BufferStrategy на случай, если она была null, переменной переменной bs. Измените его на

if (bs == null) { 
    bs = this.createBufferStrategy(3); // in case it returns BufferStrategy. 
    bs = this.getBufferStrategy(); // otherwise 
} 
0

Owww я так глуп, я забыл поставить вернуться он должен быть этот

private void render(){ 
    BufferStrategy bs = this.getBufferStrategy(); 
    if(bs == null){ 
     this.createBufferStrategy(3); 
     return; 
    } 

    Graphics g = bs.getDrawGraphics(); 

    g.dispose(); 
    bs.show(); 
} 
Смежные вопросы