Java计时器 - 执行任务,等待,执行任务。没有Thread.sleep()

时间:2014-07-17 09:25:06

标签: java timer wait

我有一个程序,我正在尝试执行任务,等待一秒钟,移动进度条,然后执行另一个任务,等待,进度条,执行等。

如果我使用

Thread.sleep()

它会冻结我的GUI,不允许我的进度条移动。我尝试过以下问题:

How to set a timer in java

Make something wait without using Thread.sleep()?

Make a java program sleep without threading

我的代码与此类似:

import java.util.*

...

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    Runtime.getRuntime().exec("cmd /c del file");
                } catch (IOException ex) {
                    Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, 1000);
        progressBar.setValue(16);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    Runtime.getRuntime().exec("cmd /c del file");
                } catch (IOException ex) {
                    Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, 1000);
        progressBar.setValue(32);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    Runtime.getRuntime().exec("cmd /c del file");
                } catch (IOException ex) {
                    Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, 1000);
        progressBar.setValue(48);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    Runtime.getRuntime().exec("cmd /c del file");
                } catch (IOException ex) {
                    Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, 1000);
        progressBar.setValue(64);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    Runtime.getRuntime().exec("cmd /c del file");
                } catch (IOException ex) {
                    Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, 1000);
        progressBar.setValue(80);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                try {
                    Runtime.getRuntime().exec("cmd /c del file");
                } catch (IOException ex) {
                    Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, 1000);
        progressBar.setValue(100);
        progressBar.setString("Done!");
        timer.schedule(new TimerTask() {
            @Override
            public void run() {

            }
        }, 1000);
        System.exit(0);

提前感谢您的帮助。

Riccorbypro

1 个答案:

答案 0 :(得分:0)

任何处理都应该在与GUI线程(EDT)分开的线程上进行,以确保当您在线程上调用sleep时,GUI仍然是响应式的。 因此,无论您正在做什么来衡量进度或模拟它,都应该发生在与GUI不同的线程中。

看看:

Swing Workers

Progress Bars