我得到一个错误:java.lang.NullPointerException在Graphics g上
我得到一个错误:图形g上的java.lang.NullPointerException。 这是我的代码:我得到一个错误: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
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);