2014-10-05 1 views
0

코드 :왜 내 JLabel 애니메이션이 작동하지 않습니까?

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

그리고 내 질문은 왜이다! :

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) { 

      } 

이 코드는 동일하게 작동?

+0

질문의 제목은 "왜 내 JLabel 애니메이션이 작동하지 않습니까?"입니다. - 실제로 작동합니까,하지 않습니까? – msrd0

+0

EDT에서이 프로그램을 실행하는 경우 메소드가 실행되는 동안 GUI가 잠기고 완료 될 때까지 레이블이 다시 채워지지 않습니다. –

답변

1

여기 다시 간다.

레이블을 그릴 스레드는 다음 코드 줄을 실행하는 스레드입니다. 이벤트 발송 스레드. 이 코드 행을 실행하는 동안 바쁜 것이므로 실행을 마칠 때까지 아무 것도 칠할 수 없습니다.

잠자기에는 별도의 스레드를 사용해야하며 정기적으로 레이블 아이콘을 변경해야합니다. 모든 스윙 구성 요소는 항상 EDT에서 액세스해야합니다. 가장 쉬운 방법은 스윙 타이머를 사용하는 것입니다.

tutorial on swing and concurrency을 읽으십시오.

관련 문제