while循环递增,等待不起作用

时间:2015-03-04 17:29:43

标签: java loops while-loop wait

我试图增加地板,每次地板的状态应该改变并在地板上显示缓慢增加到所需的楼层。但是地板等待然后直接跳到他想要的地板上,而我却没有看到它逐渐增加。

这是我的代码。

    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");
}

1 个答案:

答案 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();
    }