[J2SE] 請問thread的run方法中是不是有什麼限制

看板java作者 (visit)時間19年前 (2006/05/10 09:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
我有三個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
文章代碼(AID): #14OKBCxc (java)
文章代碼(AID): #14OKBCxc (java)