java中的线程不工作
上一个相同的线程在JavaEclipseLuna中运行,但是出现了中断。我改为JavaEEIDE,上一个在luna中运行的线程现在没有在JavaEEIDE中运行,这里是java中的线程不工作,java,multithreading,swing,thread-safety,eclipse-luna,Java,Multithreading,Swing,Thread Safety,Eclipse Luna,上一个相同的线程在JavaEclipseLuna中运行,但是出现了中断。我改为JavaEEIDE,上一个在luna中运行的线程现在没有在JavaEEIDE中运行,这里是 public void clockTime(){ Thread clock=new Thread(){ public void run(){ try { for(;;){
public void clockTime(){
Thread clock=new Thread(){
public void run(){
try {
for(;;){
Calendar cald=new GregorianCalendar();
day=cald.get(Calendar.DAY_OF_MONTH);
month=cald.get(Calendar.MONTH);
year=cald.get(Calendar.YEAR);
seconds=cald.get(Calendar.SECOND);
minutes=cald.get(Calendar.MINUTE);
hours=cald.get(Calendar.HOUR);
lblClock.setText("<html>"+hours+":"+minutes+":"+seconds+"<br>"+day+"/"+month+"/"+year+"</html>");
sleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
clock.start();
}
public void clockTime(){
线程时钟=新线程(){
公开募捐{
试一试{
对于(;;){
日历计算=新的公历日历();
day=cald.get(日历,每月的第天);
月=计算获取(日历月);
年=计算获取(日历年);
秒=计算获取(日历秒);
分钟=计算获取(日历分钟);
小时=计算获取(日历小时);
lblClock.setText(“+hours+”:“+minutes+”:“+seconds+”
“+day+”/“+month+”/“+year+”);
睡眠(1000);
}
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
};
clock.start();
}
谁能帮我一下吗??。
调用构造函数的方法我在这里没有看到,但是如果我删除线程,该方法将被执行,因为它会根据需要显示时间和日期,但不会因为没有循环和永久循环而更改。如果这是一个Swing应用程序,则:
- 通过调用
SwingUtilities.invokeLater(Runnable),确保在Swing事件线程上启动应用程序代码>在该可运行模式下启动GUI的位置
- 您正在对上面代码中的Swing事件线程(EDT)执行一个键Swing调用off,即
调用。这也应该只在Swing事件线程上调用,方法与上面的点相同lblClock.setText(…)
- 或者可以使用,然后在发布/处理方法对中进行setText调用
- 或者(这就是我要做的),扔掉上面所有的代码,使用一个。这要简单得多,而且您不必担心on/off Swing事件,因为所有调用都在事件线程上
int timerDelay = 1000;
Timer timer = new Timer(timerDelay, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// calculations to get time Strings
String text = ..... // use calculations above
lblClock.setText(text);
}
});
timer.start();
请注意,尚未测试代码如果这是一个Swing应用程序,则:
- 通过调用
SwingUtilities.invokeLater(Runnable),确保在Swing事件线程上启动应用程序代码>在该可运行模式下启动GUI的位置
- 您正在对上面代码中的Swing事件线程(EDT)执行一个键Swing调用off,即
调用。这也应该只在Swing事件线程上调用,方法与上面的点相同lblClock.setText(…)
- 或者可以使用,然后在发布/处理方法对中进行setText调用
- 或者(这就是我要做的),扔掉上面所有的代码,使用一个。这要简单得多,而且您不必担心on/off Swing事件,因为所有调用都在事件线程上
int timerDelay = 1000;
Timer timer = new Timer(timerDelay, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// calculations to get time Strings
String text = ..... // use calculations above
lblClock.setText(text);
}
});
timer.start();
请注意,代码尚未测试您的问题不清楚,您应该对其进行编辑以改进其风格并便于理解。您的问题不清楚,您应该对其进行编辑以改进其风格并便于理解。