[英]How to fix a nullpoint exception across classes that you can't use get/set methods with?
編輯:另外,有沒有比使用Canvas更好的方法呢?
主班:
package sanity;
public class Client {
int X = 1024;
int Y = 680;
StaticGUI gui;
public void launch() {
gui = new StaticGUI();
gui.draw();
}
public static void main(String[] args) {
Client game = new Client();
game.launch();
Thread t = new Thread(new Update());
t.start();
}
}
具有圖形變量的類:
package sanity;
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
class StaticGUI extends Client {
JFrame mainWin;
Canvas UI;
BufferStrategy Buffer;
Graphics g;
Graphics2D g2d;
public StaticGUI() {
mainWin = new JFrame("Game");
UI = new Canvas();
}
void draw() {
mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWin.setIgnoreRepaint(true);
UI.setIgnoreRepaint(true);
UI.setBounds(0, 0, X, Y);
UI.setBackground(Color.WHITE);
mainWin.add(UI);
mainWin.pack();
mainWin.setResizable(false);
mainWin.setLocationRelativeTo(null);
mainWin.setVisible(true);
UI.createBufferStrategy(2);
Buffer = UI.getBufferStrategy();
g = Buffer.getDrawGraphics();
g2d = (Graphics2D) g;
}
}
我需要他們的課程:
package sanity;
import java.awt.*;
public class Update extends StaticGUI implements Runnable {
public Update() {
}
@Override
public void run() {
System.out.println(X + "," + Y);
g2d.setColor(Color.black);
g2d.fillRect(0, 0, X, Y);
g.dispose();
Buffer.show();
}
}
據我了解,您將創建一個Client實例(稱為“游戲”),並調用其launch()方法,該方法在該實例上啟動draw(),隨后的調用將初始化其g2d成員。 稍后,您將創建另一個 Client實例(帶有新的Update()),並嘗試訪問該更高版本實例的g2d成員。 該成員在這里未啟動。 這兩個實例是不同的,並且它們不共享成員的值(g2d也不是靜態的)。 您要么使該成員成為靜態成員(通常是一種不好的做法),要么也應在第二個Client上調用draw()。
如我所見,我認為您調用g2d.setColor(Color.black);
在g2d初始化之前。 我相信您之前缺少調用StaticGUI
的draw()
。 我知道您在lauch()中調用了客戶的draw(),但您是為Client(而不是StaticGUI
或Update
draw()
使用draw()
的新實現draw()
調用的。 然后,我不確定,但我想
System.out.println(X + "," + Y);
draw();
g2d.setColor(Color.black);
將解決該問題,因為它應該調用StaticGUI的draw()。 (如果我錯了,請糾正我!:))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.