我建立一個棋盤遊戲的小程序,大約處理用戶輸入的被忽略的是這樣的:在Java中,AWT,重畫法似乎有利於啓動方法
public void mousePressed(MouseEvent event) {
int row = event.getX()/(getSize().width/8) ;
int column = event.getY()/(getSize().height/8) ;
if(possibleMove(column, row) {
makeMove(column,row,whosTurn);
repaint();
start();
}
}
後人類輸入,計算機選擇一個移動並像這個方法一樣調用repaint()和start()。
但是,屏幕似乎只有在計算機已經移動後纔會更新,因此在調用start()之後。這是怎麼發生的,因爲repaint()在start()之前被調用?
我懷疑這可能是因爲repaint()啓動一個新的線程(是嗎?),但爲什麼它會等待start()?
當然,如果需要,我可以提供更多的代碼。
你能解釋一下,爲什麼它應該在外面? – dantuch 2011-04-06 14:22:34
通常情況下,事件調度線程(EDT)不應該保持繁忙,運行與UI無關的代碼。在這種特定情況下,不清楚'start()'方法在做什麼,所以只有@Maarten可以決定它是否可以從EDT移走。 – kschneid 2011-04-06 14:27:09
好的提示。將UI保持在遊戲機制之外似乎確實是一個好主意。他們現在有點混亂起來。我想我應該在applet初始化時創建一個新線程? – Maarten 2011-04-06 15:19:26