时间不会在netbeans中动态变化

时间:2015-04-14 10:10:34

标签: java netbeans-8

如果我删除final,则在使用日历变量时会出错,而使用最终时间时不会动态更改

final Calendar cal= new GregorianCalendar();
     Thread clock= new Thread(){
     public void run(){
      for (;;) {
        int am=cal.get(Calendar.AM_PM);
        int hr=cal.get(Calendar.HOUR);
        int min=cal.get(Calendar.MINUTE);
        int sec=cal.get(Calendar.SECOND);
         if (am==0) {
             jtime_Label.setText(""+hr+":"+min+":"+sec+" AM");
         }else
         {
         jtime_Label.setText(""+hr+":"+min+":"+sec+" PM");
         }
         int day=cal.get(Calendar.DAY_OF_MONTH);
     int mon=cal.get(Calendar.MONTH);
     int year=cal.get(Calendar.YEAR);
     date_label.setText(""+day+"-"+(mon+1)+"-"+year);

    }

     }


     };
     clock.start();

2 个答案:

答案 0 :(得分:1)

  

如果我删除final,则在使用日历变量时会出错!!

这并不奇怪,它会给出错误,因为JLS指定了

  

但是,本地类只能访问本地变量   宣布最终

正如Java Docs所说

public GregorianCalendar() //---> Default constructor
  

使用当前时间构造默认的GregorianCalendar   默认时区使用默认语言环境

所以它并不意味着如果您要在10分钟后或20分钟后使用此日历对象,它将更改时间,它将保持相同的时间创建对象

如果你想创建一个计时器,那么JTimer可能会帮助你,但这不是正确的方法!!

答案 1 :(得分:0)

您已经创建了一个GregorianCalendar对象,该对象可以创建创建时的当前时间。

在处理从中读取时间时,您不会更改该时间 您需要在处理过程中更改日历校准的时间。

我建议添加

cal.setTime(new Date());

cal.setTimeInMillis(System.currentTimeMillis());

在你的线程内循环。

类似这样的事情

final Calendar cal= new GregorianCalendar();
Thread clock= new Thread(){
public void run(){
    for (;;) {
        //// add this line
        cal.setTimeInMillis(System.currentTimeMillis());
        /////
        int am=cal.get(Calendar.AM_PM);
        int hr=cal.get(Calendar.HOUR);
        int min=cal.get(Calendar.MINUTE);
        int sec=cal.get(Calendar.SECOND);
        if (am==0) {
            jtime_Label.setText(""+hr+":"+min+":"+sec+" AM");
        } else {
            jtime_Label.setText(""+hr+":"+min+":"+sec+" PM");
        }
        int day=cal.get(Calendar.DAY_OF_MONTH);
        int mon=cal.get(Calendar.MONTH);
        int year=cal.get(Calendar.YEAR);
        date_label.setText(""+day+"-"+(mon+1)+"-"+year);
        }
    }
};
clock.start();