我试图增加地板,每次地板的状态应该改变并在地板上显示缓慢增加到所需的楼层。但是地板等待然后直接跳到他想要的地板上,而我却没有看到它逐渐增加。
这是我的代码。
void move(int floor) {
while (floor > elevator.currentFloor) {
elevator.currentFloor++;
changeStatus(elevator);
currentFlrLbl.setText("Current Floor: " + elevator.currentFloor);
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
} System.out.println("DONE");
}
答案 0 :(得分:0)
可能与您正在睡觉的线程有关。我建议假设您使用Swing,在SwingWorker上分解工作。这允许您的工作在“工作”线程上完成,GUI更新将在EDT上完成。像这样:
public void move(int floor) {
new SwingWorker<Integer, String>() {
@Override
protected Integer doInBackground() throws Exception {
while (floor > elevator.currentFloor) {
elevator.currentFloor++;
changeStatus(elevator);
publish(floor);
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
protected void done() {
System.out.println("DONE");
}
@Override
protected void process(List<String> list) {
Integer value = list.get(0);
currentFlrLbl.setText("Current Floor: " + value);
}
}.execute();
}