上一篇中的Bounce程序,由于 addBall 方法阻塞了事件隊列線程,導(dǎo)致事件隊列線程無法再響應(yīng)其他界面事件。因此,點擊 Start 按鈕后,程序就好像死機一樣。如果啟動一個新的線程,問題就迎刃而解了。
源代碼
下載地址:http://www.aygfsteel.com/Files/jeff-lau/bounce.zip
下面是部分源代碼。
/**
* @(#) BounceFrame.java 2007-12-31
*
* Copyright? 2007 Jeff. 該源代碼遵循BSD開源協(xié)議。
*/
private void addBall() {
new Thread(new Runnable() {
public void run() {
Ball ball = ballPanel.addBall();
try {
for (int i = 0; i < 1000; i++) {
ball.move(ballPanel.getBounds());
ballPanel.repaint();
Thread.sleep(3);
}
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}).start();
}
啟動一個新線程
// 創(chuàng)建一個Runnable接口的實現(xiàn)
Runnable r = ...;
//創(chuàng)建一個Thread對象
Thread t = new Thread(Runnable r);
// 啟動線程
t.start();
還有一個啟動線程的方法,就是直接從Thread派生一個類,而不是實現(xiàn)Runnable接口。如:
//MyThread是Thread類的一個子類
Thread t = new MyThread();
t.start();