我正在嘗試同時執行兩個作業。我試圖做的事情之一是顯示一個計時器計時器,另一個正在移動球。Java同時執行
這是我創建的計時器,又撥打了moveBall方法
button.addChangeListener(new ChangeListener() {
int start = 0;
public void stateChanged(ChangeEvent e) {
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
timeValue.setText(++start + " sec");
}
};
timer = new Timer(1000, taskPerformer);
timer.start();
ball.moveBall();
}
});
這是我moveBall方法
public void moveBall() {
Thread ball = new Thread() {
double counter = 0;
int t = (int) (2 * Vy/9.8);
public void run() {
try {
while (t >= 0) {
// calculate Vx and Vy
Ball.this.setX(Ball.this.getX() + Vx);
Ball.this.setY(Ball.this.getY() - Vy);
counter += 50;
if (counter == 1000) {
t--;
counter = 0;
}
paintingComponent.repaint();
Thread.sleep(20);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
ball.start();
}
當我執行上面的代碼上的標籤顯示通過時間在球移動過程中根本沒有改變,當移動結束時,它取最後一個數字。
你應該使用Swing定時更新兩個。如果您更容易創建多個Swing定時器 – ControlAltDel
如果您不啓動「滾珠線程」,標籤是否更改其值? – Supahupe
是的,當我沒有開始球線時它確實改變了它的值。 – Hunk