我得到一个错误:java.lang.NullPointerException在Graphics g上

我得到一个错误:java.lang.NullPointerException在Graphics g上,java,Java,我得到一个错误:图形g上的java.lang.NullPointerException。 这是我的代码: package main; import java.awt.Canvas; import java.awt.Dimension; import java.awt.Graphics; import java.awt.image.BufferStrategy; import javax.swing.JFrame; public class main implements Runnable { p

我得到一个错误:图形g上的java.lang.NullPointerException。 这是我的代码:

package main;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
public class main implements Runnable {
public static final int WIDTH = 1024;
public static final int HEIGHT = 1024;
public static final String TITLE = "platformer";
public boolean running = false;
static main home = new main();
public Graphics g;
public static Canvas canvas = new Canvas();
public static void main(String[] args) {
    home.display();
    home.start();
}
public void display(){
    JFrame frame = new JFrame(TITLE);
    frame.setSize(WIDTH, HEIGHT);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    canvas.setPreferredSize(new Dimension(WIDTH, HEIGHT));
    frame.add(canvas);
}
BufferStrategy bs;
public void render(){
    bs = main.getCanvas().getBufferStrategy();
    if(bs == null){
        main.getCanvas().createBufferStrategy(3);
    }
    g = bs.getDrawGraphics();
    g.fillRect(0, 0, WIDTH, HEIGHT);
    g.dispose();
    bs.show();
}
public void tick(){

}
public void run(){
    long lastTime = System.nanoTime();
    final double amountofticks = 60;
    double ns = 1000000000/amountofticks;
    double delta = 0;
    double time = 0;
    int frames = 0;
    while(running){
        long now = System.nanoTime();
        delta += (now-lastTime)/ns;
        time += (now-lastTime);
        lastTime = now;
        if(delta>=1){
            home.tick();
            home.render();
            delta--;
            frames++;
        }
        if(time>1000000000){
            System.out.println(frames);
            time = 0;
            frames = 0;
        }
    }
    stop();
}
private Thread thread;
public void start(){
    running = true;
    thread = new Thread(this);
    thread.start();
}
public static Canvas getCanvas(){
    return canvas;
}
public void stop(){
    try {
        thread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
}
我收到错误消息: 线程“thread-2”java.lang.NullPointerException中的异常 在main.main.render(main.java:37) 在main.main.run(main.java:59) 位于java.lang.Thread.run(未知源) 第37行是 g=bs.getDrawGraphics(); 我认为出于某种原因,图形是空的。 很长一段时间以来,我一直试图使此代码更改行

main.getCanvas().createBufferStrategy(3);


出于理智的考虑,请不要定义名为
main
的包或名为
main
的类,因为它们变得非常难以解释。请学会正确缩进代码。如果它在源文件中缩进了,那么当您复制/粘贴到堆栈溢出时,选择所有内容并按CTRL+Ki。一旦我更改它,该行就会出现错误:类型不匹配:无法从void转换为BufferStrategy在我更改的行上,我收到错误:类型不匹配:无法从void转换为BufferStrategy
bs = main.getCanvas().createBufferStrategy(3);