Java netbeans中的时间不动态变化
若我删除final,那个么在使用日历变量时会出现错误,而在使用final时,时间不会动态变化Java netbeans中的时间不动态变化,java,netbeans-8,Java,Netbeans 8,若我删除final,那个么在使用日历变量时会出现错误,而在使用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);
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();
如果删除final,则在使用日历变量时会出现错误
这一点也不奇怪,它会给出错误,因为JLS是这样指定的
但是,局部类只能访问
宣布最终
照我说的
使用中的当前时间构造默认的GregorianCalendar
具有默认区域设置的默认时区
因此,这并不意味着如果在10分钟后或20分钟后使用此日历对象,它将更改时间,在创建对象时,它将保持不变
如果你想创建一个计时器,那么JTimer可能会帮助你,但这不是正确的方法 您已经创建了一个GregoriaCalendar对象,该对象将在当前时间创建 在处理以从中读取时间时,您不会更改该时间 在处理过程中,您需要更改日历cal中的时间 我建议加上
cal.setTime(new Date());
或
在线程内的循环中
像这样的
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();
这没用。请说得更具体一点,它现在正在运行,我已经做到了,你能告诉我我们为什么要这样做的细节吗?你能更具体一点吗
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();