带有计时器的空指针异常

时间:2017-10-11 09:35:27

标签: java

我遇到的任务有一个问题:我需要编写一个带有计时器组件的游戏,但我得到一个"线程中的异常" Timer-0"显示java.lang.NullPointerException"错误。我正在使用最新版本的eclipse。帮助将不胜感激。

实际错误:

  

线程中的异常" Timer-0"显示java.lang.NullPointerException     在GameFrame $ MyTimerTask.run(GameFrame.java:152)     at java.util.TimerThread.mainLoop(Unknown Source)     在java.util.TimerThread.run(未知来源)

class VoteAddSerializer(serializers.ModelSerializer):
    class Meta:
        model = Vote
        exclude =('id','created_date','user',)

    def validate(self, data):
        request = self.context.get('request')
        vote_date = request.user.profile.vote_date
        if vote_date + timedelta(days=1) > timezone.now():
            raise serializers.ValidationError("You need wait to vote again")
        return data

2 个答案:

答案 0 :(得分:1)

此行导致MyTimerTask实例执行时延迟为0(无延迟)。

timer.schedule(new MyTimerTask(), 0,1000);

MyTimerTask访问字段timer_field,该字段在schedule语句之后初始化。

timer_field = new JTextField();

所以timer_field仍为null

解决方案:

    // timer.schedule(new MyTimerTask(), 0,1000);

    timer_field = new JTextField();
    timer_field.setText(hours + ":" + minutes + ":" + seconds);
    timer_field.setFont(new Font("random",0,50));
    timer_field.setHorizontalAlignment(JTextField.CENTER);
    timer_field.setBackground(Color.white);
    timer_field.setForeground(Color.green);

    timer.schedule(new MyTimerTask(), 0,1000);

因此,计划调用应该稍晚。

答案 1 :(得分:0)

你的内部类MyTimerTask在初始化之前使用timer_field。 你可以移动这些行:

timer = new Timer();
timer.schedule(new MyTimerTask(), 0,1000);

到构造函数的末尾,以便在它之后初始化timer_field:

timer_field = new JTextField();