/***************************************** 展示Thread *************************************************/ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ui36 { ImageIcon imgi2,imgi1; int imgpt=52; int x,y,x1,y1; cmove c1,c2; JFrame f = new JFrame("Thread"); JLabel lab1,lab2; Container c; static int money=100000; public ui36() { // 弄一張圖來娛樂一下 imgi1=new ImageIcon("bridge/02.GIF"); imgi2=new ImageIcon("bridge/03.GIF"); lab1=new JLabel(imgi1); lab2=new JLabel(imgi2); //設定滑鼠事件處理程式 f.addMouseMotionListener(new procmouse()); c=f.getContentPane(); f.setSize(600,480); c.setLayout(null);//取消版面設定 x=100;x1=300; y=100;y1=200; lab1.setBounds(x,y,100,100); lab2.setBounds(x1,y1,100,100); c.add(lab1); c.add(lab2); c1=new cmove(1); c2=new cmove(0); c1.start(); c2.start(); //設定關閉視窗,因為不是繼承JFrame,所以必須另外處理 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); System.out.println("建構子結束"); } public /* synchronized*/ static void addmoney() { int tmp; tmp=money+1000; try { Thread.sleep((int)(1000*Math.random())); //delay 1s } catch (InterruptedException e) { System.out.println("Interruped!"); } money=tmp; System.out.println("money="+money); } class cmove extends Thread { private int pt=0,meet_cnt=0; public cmove(int inp) { pt=inp; } public void run()//真正的執行緒 { while (true) //不寫這行,run一次就結束了 { if (pt==1) { x1=x1-10; if (x1<0) x1=400; lab2.setBounds(x1,y1,100,100); } else { x=x+10; if (x>400) x=0; lab1.setBounds(x,y,100,100); } f.repaint(); addmoney(); } } } /*****實作滑鼠移動事件處理物件 *******/ class procmouse extends MouseMotionAdapter { /*****實作滑鼠移動事件處理方法 *******/ public void mouseDragged(MouseEvent e) { //取得X Y座標 x=e.getX(); y=e.getY(); lab1.setBounds(x,y,100,100); if (y>80) //太上面就不要show了 f.repaint(); } public void mouseMoved(MouseEvent e1) { //取得X Y座標 x1=e1.getX(); y1=e1.getY(); lab2.setBounds(x1,y1,100,100); if (y1>80) //太上面就不要show了 f.repaint(); } } public static void main(String args[]) //程式起點 { ui36 app=new ui36(); //畫圖 } }