2014-11-23 36 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 2014-11-23 20:52:08

+0

this.createBufferStrategy(3); – swingBoris 2014-11-23 20:52:56

+0

@swingBoris:你如何期待改變'bs'? – SLaks 2014-11-23 20:53:39

回答

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' returns void](https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html#createBufferStrategy%28int%29)。 – Tom 2014-11-23 20:57:15

+0

@Tom我編輯了我的答案 – mabbas 2014-11-23 20:59:15

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(); 
} 
相關問題