1

我在 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。

4

2 回答 2

5

从您的代码中,我了解到您正在尝试通过增加(放大)其大小来为图标设置动画。然而,由于睡眠任务是在事件调度线程 (EDT) 上完成的,因此会导致 GUI 冻结。因此,不应在事件调度线程上运行诸如 Thread.sleep() 之类的所有耗时任务。

考虑使用SwingUtilities计时器

于 2012-11-21T06:01:11.410 回答
-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 Thread 中设置相同的动画是唯一的问题。

于 2012-11-21T07:03:41.723 回答