2014-10-05 55 views
0

代码:为什么我的JLabel动画不起作用?

try { 
       ImageIcon ico2=new ImageIcon("src/on1.png"); 
       jLabel42.setIcon(ico2); 
       Thread.sleep(100); 
       ImageIcon ico3=new ImageIcon("src/on2.png"); 
       jLabel42.setIcon(ico3); 
       Thread.sleep(100); 
       ImageIcon ico4=new ImageIcon("src/on3.png"); 
       jLabel42.setIcon(ico4); 
       Thread.sleep(100); 
       ImageIcon ico5=new ImageIcon("src/on4.png"); 
       jLabel42.setIcon(ico5); 
       Thread.sleep(100); 
       ImageIcon ico7=new ImageIcon("src/on5.png"); 
       jLabel42.setIcon(ico7); 
       Thread.sleep(100); 
       ImageIcon ico8=new ImageIcon("src/on6.png"); 
       jLabel42.setIcon(ico8); 
       Thread.sleep(100); 
       ImageIcon ico9=new ImageIcon("src/on7.png"); 
       jLabel42.setIcon(ico9); 
       Thread.sleep(100); 
       ImageIcon ico10=new ImageIcon("src/on8.png"); 
       jLabel42.setIcon(ico10); 
       Thread.sleep(100); 
       ImageIcon ico6=new ImageIcon("src/on1.png"); 
       jLabel42.setIcon(ico6); 
       OffOn1=1; 
      } catch (InterruptedException ex) { 

      } 

此代码的工作一样:

Thread.sleep(900); 
ImageIcon ico6=new 
ImageIcon("src/on1.png"); 
jLabel42.setIcon(ico6); 
OffOn1=1; 

我的问题是,为什么!?

+0

问题的标题是“为什么我的JLabel动画不起作用?” - 它实际上工作与否? – msrd0 2014-10-05 16:57:40

+0

如果您在EDT中运行此操作,GUI将在您的方法运行时锁定,并且在完成之前不会重新绘制标签。 – 2014-10-05 16:58:27

回答

1

这里我们再次去。

应该绘制标签的线程是执行这些代码行的线程:事件分派线程。由于它正忙于执行这些代码行,因此在完成执行它们之前不能绘制任何内容。

您应该使用单独的线程进入睡眠状态并定期更改标签的图标。但请确保每个挥杆组件始终从EDT进入。最简单的方法是使用Swing Timer。

阅读tutorial on swing and concurrency