Re: [J2SE] 請問thread的run方法中是不是有什麼限制
※ 引述《topcomic1976.bbs@ptt.cc (visit)》之銘言:
> 我有三個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){
this.labelTemp = 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();
> }
> }
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知止知止可以不殆譬道之在天下202.75.4.140海
討論串 (同標題文章)