簡體   English   中英

如何在不能使用get / set方法的類中修復nullpoint異常?

[英]How to fix a nullpoint exception across classes that you can't use get/set methods with?

所以我需要在StaticGUI中創建的圖形變量可以在Update中使用... get / set方法已經用完了,它在兩個不同的線程上運行,毫無頭緒...

編輯:另外,有沒有比使用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初始化之前。 我相信您之前缺少調用StaticGUIdraw() 我知道您在lauch()中調用了客戶的draw(),但您是為Client(而不是StaticGUIUpdate draw()使用draw()的新實現draw()調用的。 然后,我不確定,但我想
System.out.println(X + "," + Y);
draw();
g2d.setColor(Color.black);

將解決該問題,因為它應該調用StaticGUI的draw()。 (如果我錯了,請糾正我!:))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM