0

所以我需要我在StaticGUI中创建的图形变量用于更新......获取/设置方法已经出来,它在两个不同的线程上运行,我一无所知......

编辑:另外,有没有比 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();
    }
}
4

2 回答 2

1

据我了解,您创建了一个 Client 实例(称为“游戏”),并调用它的 launch() 方法,该方法在该实例上启动一个 draw() ,并且稍后的调用将初始化其 g2d 成员。稍后,您创建另一个客户端实例(使用 new Update()),并尝试访问此后续实例的 g2d 成员。该成员未在此处初始化。这两个实例是不同的,它们不共享成员的值(g2d 也不是静态的)。要么将该成员设为静态(这通常是一种不好的做法),要么您也应该在第二个客户端上调用 draw()。

于 2013-05-05T15:58:19.040 回答
0

如我所见,我认为您g2d.setColor(Color.black);在 g2d 初始化之前调用。我相信您在此之前缺少调用StaticGUI's draw()。我知道您在 lauch() 中调用 Client 的 draw(),但您为 Client 调用它,而不是为StaticGUI使用Update新实现的地方draw()。然后,我不确定,但我想 会解决这个问题,因为它应该调用 StaticGUI 的 draw()。(如果我错了,请纠正我!:))
System.out.println(X + "," + Y);
draw();
g2d.setColor(Color.black);

于 2013-05-05T15:48:59.760 回答