[問題] thread run VS start

看板java作者 (= =")時間10年前 (2013/11/19 01:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
之前寫的程式不斷出錯,上網查才大略知道thread 的run和start差異 在網路上看到的講義, 講義裡做出label(圖片)移動的方式是用thread.start(); 但當我將thread放在method裡頭時,例如: static void voidTestInVoid(){ System.out.println("voidTestInVoid beginning"); thread = new addThread1("abc"); //print出abc thread.start(); thread = new addThread1("cde"); thread.start(); System.out.println("voidTestInVoid end"); } 我發現在執行 voidTestInVoid(); 時 每次執行print出來的文字順序都會不一樣,特別是不會從上而下照順序執行 根據google上查詢的結果, 有人提及若是要讓他們照順序執行,得改用thread.run(); 但在此出現一個問題,當我模仿java教學講義上的程式碼 不用thread.start();改用thread.run()去讓label不斷重新設定座標 達到讓label(圖片)看起來像是在動的感覺 例如: (下面節錄一部份程式碼 完整在: http://tung.tsu.edu.tw/lecture/java/txt/Ch08/J8_6_1.txt class movePic implements Runnable { private JLabel lblPic; public void run() { int pos_x = 0; while (true) { pos_x += 2; lblPic.setLocation(pos_x, pos_y); Pause(time); if (pos_x >= wide) pos_x = 0; } } Thread movePic1 = new Thread(new movePic(lbl1, w1, y1, time1)); movePic1.start(); //我將start改為run 我模仿講義將自己寫的程式其中的thread.start()改為thread.run() 然而,程式開始跑後, 圖片(JLabel)不會隨著座標的改變與 setLocation 在JPanel上畫出 中間的移動過程, (原本用start()這個方法 確定有做出來讓JLabel在螢幕上不斷變換位置, 產生移動的視覺效果,但改成run()就不行了) 即便是加入repaint()或是JPanel名稱.repaint() 也都沒有作用 但我又怕用thread.start();會讓整個程式在跑時會亂跳 (不會從上往下依序執行) 於是 在此想請教有什麼解決之道,能夠使程式乖乖從上往下一行行執行 同時也能讓不斷setLacation的JLabel在螢幕上產生移動的效果 或是我該改用其他方式讓圖片看起來像是在移動? (目前只讀到過用thread 不好意思打擾了,新手求給個方向,感謝<_ _> ps:我用的也是 try { Thread.sleep(pause_time); } catch(InterruptedException e) {} 讓JLabel每隔幾毫秒便setLocation一次 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.224.207.186 爬了一些文章,在想該不會是我把thread寫在listener的method裡 導致label只顯示最後一次的狀態? 但run()不行 start()就行? (搞混了 ※ 編輯: togs 來自: 36.224.207.186 (11/19 04:39)
文章代碼(AID): #1IYb0jWm (java)
文章代碼(AID): #1IYb0jWm (java)