2013-10-25 4 views
0

JFrame을 만들고 JFrame에 이미지 하나를 표시해야하는 클래스가 있습니다. 이미지는 몇 초마다 회전해야합니다.JPanel/JFrame이 업데이트되지 않습니다.

JFrame과 JPanel 모두에서 repaint(), revalidate() 및 validate()를 시도했지만 아무 것도 작동하지 않는 것 같습니다. 다음은 JFrame/JPanel을 업데이트하는 현재 코드입니다. 이 코드는 4 초를 기다린 다음 네 번째 이미지를 표시하지만 새 이미지로 매 초마다 업데이트하고 싶습니다.

public void startSlideshow(){ 
int i = 0; 
Long oldTime = System.currentTimeMillis(); 
do { 
    Long currentTime = System.currentTimeMillis(); 
    if(currentTime - oldTime >= 1000) { 
     img = new JLabel(new ImageIcon("Albums/" + album + "/" + imageNames.get(i))); 
     panel.removeAll(); 
     panel.setBackground(Color.BLACK); 
     panel.add(img); 
     panel.revalidate(); 
     panel.repaint(); 
     i++;   
     oldTime = System.currentTimeMillis(); // reset reference time 
} 
} while(i<imageNames.size()); 

panel.removeAll(); 
panel.setBackground(Color.BLACK); 
panel.add(img); 
panel.getRootPane().revalidate(); 
panel.repaint(); 
} 

나는 잠시 동안 내 머리를 두들 기면서 어떤 도움을 주셔서 감사합니다. 감사.

+0

비록 그것이 작동했다하더라도, 당신이 바쁜 대기 루프를 사용하고있을 때 그것은 재앙이 될 것입니다. D : – Boann

+0

@Boann이 방법은 효과가 없으며이 재앙이 발생하기 전에 약 10 가지 버전을 시도했습니다. 감사. – user2907236

+0

1 초 기다림을 어디에서 관리하고 있습니까? –

답변

2

이벤트 디스패치 스레드를 차단하여 새로운 다시 그리기 요청을 처리하지 못하게합니다.

대신 루프 Thread.sleep를 사용하는 How to Use Swing TimersConcurrency in Swing

한 번 봐 걸릴 javax.swing.Timer

를 사용해보십시오 당신은 또한 간단 대신 새로운 JLabel을 만드는 JLabel의 아이콘을 변경 찾을 수 있습니다 매번 ...

관련 문제