为什么不在屏幕上打印?

时间:2012-04-17 20:41:37

标签: java user-interface

我已经按照这些教程制作了以下内容。 http://www.youtube.com/playlist?list=PL54DB126285ED0420

Main.java:

public class Main extends JFrame {

  GamePanel gp;

  public Main() {
    gp = new GamePanel();
    setSize(500, 400);
    setVisible(true);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(gp);
  }

  public static void main(String[] args) {
    Main m = new Main();
  }
}

GamePanel.java:

public class GamePanel extends JPanel implements Runnable {

  // Double Buffering Variables
  private Image dbImage;
  private Graphics dbg;

  // JPanel Variables
  static final int GWIDTH = 500, GHEIGHT = 400;
  static final Dimension gameDim = new Dimension(GWIDTH, GHEIGHT);

  // Game Variables
  private Thread game;
  private volatile boolean running = false;

  public GamePanel() {
    setPreferredSize(gameDim);
    setBackground(Color.WHITE);
    setFocusable(true);
    requestFocus();

    // Handle all key inputs from the user
    addKeyListener(new KeyAdapter() {
      @Override public void keyPressed(KeyEvent e) {}
      @Override public void keyReleased(KeyEvent e) {}
      @Override public void keyTyped(KeyEvent e) {}
    });
  }

  public void run() {
    while (running) {
      gameUpdate();
      gameRender();
      paintScreen();
    }
  }// END run

  private void gameUpdate() {
    if (running && game != null) {
      // update the game state
    }
  }

  private void gameRender() {
    // create the buffer
    if (dbImage == null) {
      dbImage = createImage(GWIDTH, GHEIGHT);
      if (dbImage == null) {
        System.err.println("dbImage is still null!!!");
        return;
      } else {
        dbg = dbImage.getGraphics();
      }
    }

    // Clear the screen
    dbg.setColor(Color.WHITE);
    dbg.fillRect(0, 0, GWIDTH, GHEIGHT);

    // Draw the game elements
    draw(dbg);
  }

  // draw all game content
  public void draw(Graphics g) {}

  private void paintScreen() {
    Graphics g;
    try {
      g = this.getGraphics();

      if (dbImage != null && g != null)
        g.drawImage(dbImage, 0, 0, null);

      // For Linux
      Toolkit.getDefaultToolkit().sync();
      g.dispose();

    } catch (Exception e) {
      System.err.println(e);
    }
  }

  public void addNotify() {
    super.addNotify();
    startGame();
  }

  private void startGame() {
    if (game == null || !running) {
      game = new Thread(this);
      game.start();
      running = true;
    }
  }

  public void stopGame() {
    if (running)
      running = false;
  }

  private void log(String s) {
    System.out.println(s);
  }
}

它应该只是在屏幕上打印一个“Hello World”字符串,但它没有执行。我已经过了几次代码,但看不出有什么问题。

所以没有什么导致它不显示字符串。

感谢。

2 个答案:

答案 0 :(得分:0)

好的。终于找到了它。

在我的Main.java中,我将add(gp);代码放在顶部。因为基本上它正在落下。

P.S。再说一次。我不小心删除了draw方法的内容。我很傻。对不起。它应该g.drawString("Hello World!", 100, 100);

感谢。

答案 1 :(得分:-1)

  

所以没有什么导致它不显示字符串。

对于初学者来说,“Hello World”字符串本身不存在。

我建议你仔细阅读你再次引用的教程,因为你似乎是Java的新手,需要更多练习。