计时器和JFrame出错 [英] Error with timer and JFrame

查看:144
本文介绍了计时器和JFrame出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在制作一个带有计时器和JFrame的游戏(以及许多其他东西,但只有这两个导致问题),并且在运行下面的段之后,我得到了一个奇怪的错误。至少对于那些在此之前从未使用过这些课程的人来说。

I'm making a game with a timer and a JFrame (and many other things but only these 2 are causing problems), and after running the segments below, I got a weird error. At least for me who has never used these classes prior to this.

开始执行这个

private static GameView window;
private static Timer time;
public static void main(String args[])
{
    window = new GameView(800,600);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setVisible(true);

    time = new Timer();
    time.schedule( new TimerTask(){
        public void run(){GameState.update(); 
        window.paintComponents(null);}
        },0, 40);

}

称之为:

public void paintComponents (Graphics g)
{

    for(Bullet j : GameState.getEnBullets()){
        g.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    for(Enemy j : GameState.getEnemies()){
        g.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    for(Bullet j : GameState.getPlayBullets()){
        g.drawImage(j.getImage(),j.getX(), j.getY(), null);}
    this.paint(g);
}

这是错误:

Exception in thread "Timer-0" java.lang.NullPointerException
    at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
    at java.awt.Container.paint(Unknown Source)
    at java.awt.Window.paint(Unknown Source)
    at Game.GameView.paintComponents(GameView.java:59)
    at Game.GameController$1.run(GameController.java:39)
    at java.util.TimerThread.mainLoop(Unknown Source)
    at java.util.TimerThread.run(Unknown Source)

我还得到一个空白的JFrame窗口(GameView扩展了JFrame)。

I also get a blank JFrame window (GameView extends JFrame).

推荐答案

要覆盖的方法是paintComponent()而不是paintComponents(带有s)。

The method to override is paintComponent() not "paintComponents" (with an s).

你永远不应该调用paintComponent()方法直。而是调用组件上的repaint()方法。

You should never invoke the paintComponent() method directly. Instead you invoke the repaint() method on the component.

这篇关于计时器和JFrame出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆