[J2SE] 請問thread的run方法中是不是有什麼限制
我有三個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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):