ตรงนี้จะเป็นส่วนหนึ่งที่ตัดมาจากโปรแกรมของผม
System.out.println("botcheck");
for(i=1 ; i<=8 ; i++)
{
for(j=1 ; j<=8 ; j++)
{
jlb[i][j].setIcon(im5);
}
}
System.out.println("sleep 1 second");
Thread.sleep(1000);
System.out.println("wakedup");
Thread.sleep(1000);เอาไว้ทำให้เครื่องมันดีเลย์หรือหน่วงเวลาไปชั่วขณะหนึ่ง(ประมาณ 1 วินาที) มันก็ดีเลย์ไปหนึ่งวินาทีอย่างถูกต้องครับ แต่มันกลับทำงานบรรทัด "jlb[i][j].setIcon(im5);" หลังการ delay แล้วทั้งๆที่วางประโยคนี้ไว้ก่อนการดีเลย์
ปล.
jlb[][] มี type เป็น JLabel สร้างไ้ว้สำหรับแสดงผลรูปภาพ ของ im5 ที่มี type เป็น ImageIcon
ทั้งๆ ที่ให้มันเซตรูปก่อนแล้วค่อย delay แต่มันกลับเซตรูปทีหลัง ซึ่งต่างจากส่วน System.out.println("botcheck"); กับ System.out.println("sleep 1 second"); ที่อยู่ก่อน Thread.sleep(1000); เช่นกัน กลับแสดงผลก่อนการ delay
คืออยากให้มันเซตรูปก่อนการ delay น่ะครับ พอมีวิธีการแก้ปัญหามั้ยครับ
ปล2. เพื่อความเข้าใจ ลำดับขั้นการทำงานมีดังนี้
1. แสดงคำพูด System.out.println("botcheck");
2. แสดงคำพูด System.out.println("sleep 1 second");
3. ดีเลย์ Thread.sleep(1000);
4. เซตไอคอน jlb[i][j].setIcon(im5); ในลูป
5. แสดงคำพูด System.out.println("wakedup");
ใครมีความเข้าใจเกี่ยวกับการใช้เทรดสลีปช่วยบอกด้วยนะครับว่าำ ทำไมไม่ทำงานเรียงลำดับ แล้วมีวิธีการแก้ไขอย่างไร
ปล3. ประยุกต์์การดีเลย์ด้วยการใช้เทคนิค for(;i<300000000;i++){} แทนการใช้ Thread.sleep(1000); ก็มีผลเหมือนกัน
System.out.println("botcheck");
for(i=1 ; i<=8 ; i++)
{
for(j=1 ; j<=8 ; j++)
{
jlb[i][j].setIcon(im5);
}
}
System.out.println("sleep 1 second");
Thread.sleep(1000);
System.out.println("wakedup");
Thread.sleep(1000);เอาไว้ทำให้เครื่องมันดีเลย์หรือหน่วงเวลาไปชั่วขณะหนึ่ง(ประมาณ 1 วินาที) มันก็ดีเลย์ไปหนึ่งวินาทีอย่างถูกต้องครับ แต่มันกลับทำงานบรรทัด "jlb[i][j].setIcon(im5);" หลังการ delay แล้วทั้งๆที่วางประโยคนี้ไว้ก่อนการดีเลย์
ปล.
jlb[][] มี type เป็น JLabel สร้างไ้ว้สำหรับแสดงผลรูปภาพ ของ im5 ที่มี type เป็น ImageIcon
ทั้งๆ ที่ให้มันเซตรูปก่อนแล้วค่อย delay แต่มันกลับเซตรูปทีหลัง ซึ่งต่างจากส่วน System.out.println("botcheck"); กับ System.out.println("sleep 1 second"); ที่อยู่ก่อน Thread.sleep(1000); เช่นกัน กลับแสดงผลก่อนการ delay
คืออยากให้มันเซตรูปก่อนการ delay น่ะครับ พอมีวิธีการแก้ปัญหามั้ยครับ
ปล2. เพื่อความเข้าใจ ลำดับขั้นการทำงานมีดังนี้
1. แสดงคำพูด System.out.println("botcheck");
2. แสดงคำพูด System.out.println("sleep 1 second");
3. ดีเลย์ Thread.sleep(1000);
4. เซตไอคอน jlb[i][j].setIcon(im5); ในลูป
5. แสดงคำพูด System.out.println("wakedup");
ใครมีความเข้าใจเกี่ยวกับการใช้เทรดสลีปช่วยบอกด้วยนะครับว่าำ ทำไมไม่ทำงานเรียงลำดับ แล้วมีวิธีการแก้ไขอย่างไร
ปล3. ประยุกต์์การดีเลย์ด้วยการใช้เทคนิค for(;i<300000000;i++){} แทนการใช้ Thread.sleep(1000); ก็มีผลเหมือนกัน
Comment