无法每秒更新时间
import java.awt.*;
import java.applet.*;
import java.util.*;
public class AppletClock extends Applet{
Calendar calendar;
Thread changeTime = null;
Thread changeBgColor = null;
String currentTime;
Color randomColor;
Font font = new Font("Arial",Font.BOLD+Font.ITALIC,80);
public void init(){
setBackground(Color.black);
setForeground(Color.WHITE);
changeTime = new Thread(new Runnable(){
public void run(){
for(;;){
calendar = Calendar.getInstance();/*When I Instantiate calendar object outside of for loop this code doesnot work and the time didnt gets updated every second Its because of this factory method or something else*/
currentTime = calendar.get(Calendar.HOUR) +":"+calendar.get(Calendar.MINUTE)+":"+calendar.get(Calendar.SECOND);
try{
Thread.sleep(1000);
}
catch(Exception e){
System.out.println(e);
}
repaint();
}
}
});
changeTime.start();
changeBgColor = new Thread(new Runnable(){
public void run(){
for(;;){
Random random = new Random();
int red = random.nextInt(255);
int green = random.nextInt(255);
int blue = random.nextInt(255);
randomColor = new Color(red,green,blue);
try{
Thread.sleep(1000);
}
catch(Exception e){
System.out.println(e);
}
repaint();
}
}
});
changeBgColor.start();
}
public void paint(Graphics g){
setBackground(randomColor);
g.setFont(font);
g.drawString(currentTime,80,120);
}
}
/*
<APPLET CODE = "AppletClock.class" WIDTH = 500 HEIGHT = 200></APPLET>
*/
当我在calendar
循环之外实例化for
个对象时,此代码不起作用,并且时间不会每秒更新一次。
因为这种工厂方法或其他原因
答案 0 :(得分:6)
创建日历实例时,它会使用当前时间设置时间,因此如果您在2013年创建实例并在2014年访问同一个实例而不更新它,它仍将保留创建时间
如果您想在每次只设置当前毫秒时更新实例
calendar.setTime(System.currentTimeInMillis());
答案 1 :(得分:3)
日历代表一些固定时间。因此,如果您在循环之外实例化它一次,它将始终表示相同的时间,除非您在循环中更新它,例如使用
calendar.setTime(new Date());
或
calendar.setTimeInMillis(System.currentTimeMillis());
那就是说,鉴于你只需要这个循环中的日历,我不明白为什么你不会保留这个解决方案,并将它声明为局部变量,而不是将其声明为一个字段。
答案 2 :(得分:2)
当您调用calendar = Calendar.getInstance();
时设置时间当您在循环外执行此操作时,只设置一次并且不再更改。
另外,您应该考虑使用ScheduledExecutorService而不是两个线程。它更容易处理,你只需要一个线程。
答案 3 :(得分:1)
它与您实例化它的位置无关。它就像Date,它保存了实例化它的那一刻的静态时间。
答案 4 :(得分:0)
我不确定你为什么要打扰......
您可以提供自定义DateFormat
public static final DateFormat TIME_FORMAT = new SimpleDateFormat("h:M:s");
private Date currentTime;
然后在你的帖子中......
public void run(){
for(;;){
currentTime = new Date();
try{
Thread.sleep(1000);
}
catch(Exception e){
System.out.println(e);
}
repaint();
}
}
然后在你画画方法......
public void paint(Graphics g){
setBackground(randomColor);
g.setFont(font);
g.drawString(TIME_FORMAT.format(currentTime),80,120);
}
但那只是我......