你好我正在学习java游戏开发,当我运行它运行的代码但是没有绘制String它给了我这个错误线程“main”中的异常java.lang.NullPointerException 在Code.Core.render(Core.java:62) 在Code.Core.run(Core.java:69) 在Code.Core.start(Core.java:27) 在Code.Core.main(Core.java:45)
继承我的代码
package Code;
import java.applet.Applet;
import java.awt.*;
import java.awt.image.VolatileImage;
import javax.swing.*;
public class Core extends Applet implements Runnable{
////////////////////////////////////////////////////////////////////
double x, y, Cx, Cy;
public static boolean isRunning = false;
static JFrame frame;
public static Core core = new Core();
public Image i = new ImageIcon("res/Google.jpg").getImage();
public VolatileImage screen;
////////////////////////////////////////////////////////////////////
public void start() {
isRunning = true;
core.run();
}
public void stop() {
isRunning = false;
}
public static void main(String[] args) {
frame = new JFrame();
frame.add(core);
frame.setUndecorated(true);
frame.pack();
frame.setResizable(false);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
core.start();
}
public void tick() {
System.out.println("tick");
}
public void render() {
Graphics g = null;
System.out.println("render");
setBackground(Color.PINK);
setForeground(Color.WHITE);
g.drawString("Test", 500, 500);
}
public void run() {
while(isRunning){
tick();
render();
try{Thread.sleep(5);}catch(Exception e){isRunning = false;}
}
}
}
答案 0 :(得分:2)
public void render() {
Graphics g = null; // uh oh.
System.out.println("render");
setBackground(Color.PINK);
setForeground(Color.WHITE);
g.drawString("Test", 500, 500); // g is null here.
}
您直接将g
指定为null,然后在其上调用方法。那会给你一个NPE。
答案 1 :(得分:0)
Applet
延伸,但创建JFrame
来容纳它。它最好混合重量和重量轻的组件,更不用说在框架上添加小程序了。Graphics
内容可用于绘制... 首先创建一个可以绘制的自定义组件(例如,从JPanel
扩展)。然后,您可以决定在何处显示它。例如,在小程序或框架上。
请查看Performing Custom Painting,了解有关如何在Swing中执行绘画的详细信息
查看Concurrency in Swing以获取有关如何执行长时间运行任务的详细信息,并从事件调度线程的上下文更新UI