Java 线程。睡眠(1000)未在秋千中工作

Java 线程。睡眠(1000)未在秋千中工作,java,multithreading,swing,animation,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(ne

我有一个简单的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){}
试试看{

对于(inti=1;i,从您的代码中,我了解到您正试图通过增大(放大)图标的大小来设置图标的动画。 但是,由于休眠任务是在事件调度线程(EDT)上完成的,因此会导致GUI冻结。因此,所有耗时的任务,如thread.sleep()不应在事件调度线程上运行


考虑在代码中使用或,我知道您试图通过增大(放大)图标的大小来设置图标的动画。 但是,由于休眠任务是在事件调度线程(EDT)上完成的,因此会导致GUI冻结。因此,所有耗时的任务,如thread.sleep()不应在事件调度线程上运行


考虑使用or,只需将整个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);
    }
}
新线程(){

for(inti=1;i只需将整个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);
    }
}
新线程(){

对于(int i=1;i)你所说的“它不工作”是什么意思?它在做什么?你期望它做什么?它应该做什么?顺便说一句,线程在GUI上的工作方式与在控制台程序上的工作方式稍有不同。这可能是你的问题。有一个指向动画示例/教程的链接你所说的“它不工作”是什么意思?它在做什么?你期望它做什么?它应该做什么?顺便说一句,线程在GUI上的工作方式与在控制台程序上的工作方式稍有不同。这可能是你的问题。有一个指向动画示例/教程的链接。这可能会起作用,有时…通过访问另一个上的Swing组件违反Swing线程规则r线程不是一个好主意。@Robin那么我该怎么做呢?看看@Algortims的答案。你需要在一个单独的线程上睡眠,并在EDT上执行SwingO操作。这可以通过使用
SwingUtilities
类或使用
javax.swing.Timer
(此处设置延迟,而不是使用
Thread.sleep
)有时,这可能会起作用……通过访问另一个线程上的Swing组件来违反Swing线程规则不是一个好主意。@Robin那么我该如何推进这一点呢?请看@Algortims的答案。您需要在单独的线程上睡眠,并在EDT上执行swingoperations。这可以通过使用
SwingUtilities类或使用
javax.swing.Timer
(在这里设置延迟,而不是使用
Thread.sleep