Thread.sleep(1000)无法在Swing中工作

时间:2012-11-21 05:18:37

标签: java multithreading swing animation

我在java swing中有一个简单的动画程序。但它没有用。

    try{
    for(int i = 1; i<=500; i++){    
    ImageIcon icon = new ImageIcon("img\\COVERFront.jpg");
    Image image = icon.getImage();
    Image scaled =  image.getScaledInstance(400, i, 0);
    jLabel2.setIcon(new ImageIcon(scaled));
    Thread.sleep(1000);
    }
    }
    catch(InterruptedException ie){}

我在netbeans 7.1工作。

2 个答案:

答案 0 :(得分:5)

从您的代码中我了解到您正试图通过增加(升级)其大小来设置图标动画。 但是,由于睡眠任务是在事件调度线程(EDT)上完成的,因此会导致GUI冻结。因此,不应该在事件调度线程上运行Thread.sleep()这样的任务。

考虑使用SwingUtilitiestimer

答案 1 :(得分:-1)

将整个for循环放在一个线程中。像

这样的东西
new Thread(){
    for(int i = 1; i<=500; i++){    
        ImageIcon icon = new ImageIcon("img\\COVERFront.jpg");
        Image image = icon.getImage();
        Image scaled =  image.getScaledInstance(400, i, 0);
        jLabel2.setIcon(new ImageIcon(scaled));
        Thread.sleep(1000);
    }
}

这样做。你试图在Event Dispatcher中设置相同的动画线程是唯一的问题。