作者topcomic1976 (visit)
看板java
标题[J2SE] 请问thread的run方法中是不是有什麽限制
时间Wed May 10 09:33:06 2006
我有三个class
class ClockTemp --主程式
class Clock --计算时间与执行thread
class UI --显示ui介面
我打算让时间显示在ui上面,所以让class UI所产生的JLabel物件
传送到clas Clock的run()方法当中,让时间不断变动显示.
但是我发现在Clock当中使用JLabel.setText(...)没问题,
但如果放到Clock类别当中的run()方法时候,compiler ok,但一执行就会出现
java.lang.NullPointerException这个例外...
所以想请教放到执行绪的run()方法中有什麽要特别注意的吗?
以下是我的程式码ClockTemp.java
import java.util.*;
import javax.swing.*;
import java.awt.*;
public class ClockTemp{
public static void main(String[] argvs){
UI ui = new UI();
ui.timeLabelNow.setText("dkjasdfj");
Clock clock = new Clock(ui.timeLabelNow);
}
}
//----------------------------------------
class Clock extends Thread{
JLabel labelTemp;
Clock(JLabel labelTemp){
Thread clock = new Thread(this);
clock.start();
}
public void run(){
labelTemp.setText("KKKKKKKKKKKKKKKKKK"); //------>fail when running
while(true){
System.out.println(getTimeNow()); //------>ok
try{
Thread.sleep(1000);
}catch(java.lang.InterruptedException e){
System.out.println("thread error");
}
}
}
String getTimeNow(){
GregorianCalendar gc = new GregorianCalendar();
return gc.get(GregorianCalendar.HOUR)+":"+
gc.get(GregorianCalendar.MINUTE)+":"+
gc.get(GregorianCalendar.SECOND);
}
}
//-----------------------------------------------
class UI extends JFrame{
JLabel timeLabelNow = new JLabel("initial");
UI(){
super("Clock");
setupUI();
}
void setupUI(){
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = this.getContentPane();
JPanel pc = new JPanel();
contentPane.add(pc,BorderLayout.CENTER);
pc.add(timeLabelNow);
this.pack();
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.222.174.11