有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

游戏循环为什么我一直在使用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();
}

有人能说出我做错了什么吗


共 (3) 个答案

  1. # 1 楼答案

    你应该试试这个:

    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();
    }
    
  2. # 2 楼答案

    即使在调用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.");
    
  3. # 3 楼答案

    如果新的BufferStrategy是null到to变量bs,您会忘记分配它。换成

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