作者togs (= =")
看板java
标题[问题] thread run VS start
时间Tue Nov 19 01:36:43 2013
之前写的程式不断出错,上网查才大略知道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)