Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环递增时,等待不起作用_Java_Loops_While Loop_Wait - Fatal编程技术网

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