Java 循环递增时,等待不起作用
我试图增加楼层,每次楼层的状态都应该改变,并显示在楼层上,慢慢增加到所需楼层。但地板只是等待,然后直接跳到他想要的地板上,我没有看到它逐渐增加 这是我的密码Java 循环递增时,等待不起作用,java,loops,while-loop,wait,Java,Loops,While Loop,Wait,我试图增加楼层,每次楼层的状态都应该改变,并显示在楼层上,慢慢增加到所需楼层。但地板只是等待,然后直接跳到他想要的地板上,我没有看到它逐渐增加 这是我的密码 void move(int floor) { while (floor > elevator.currentFloor) { elevator.currentFloor++; changeStatus(elevator); currentFlrLbl.setText("C
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");
}
可能与你正在睡觉的线有关。我建议假设你正在使用Swing,就把SwingWorker的工作分解。这使得您的工作可以在“worker”线程上完成,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();
}
公共空间移动(内部楼层){
新SwingWorker(){
@凌驾
受保护的整数doInBackground()引发异常{
while(楼层>电梯当前楼层){
电梯.currentFloor++;
更改状态(电梯);
出版(现场);
试一试{
睡眠(500);
}捕获(中断异常例外){
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
@凌驾
受保护的void done(){
系统输出打印项次(“完成”);
}
@凌驾
受保护的无效进程(列表){
整数值=list.get(0);
currentFlrLbl.setText(“当前楼层:+值”);
}
}.execute();
}