2012-08-05 1 views
0

간격 시간이 100 밀리 초인 일부 이미지를 표시하고 싶지만 화면에 표시 할 때 일부는 표시되지만 일부는 표시되지 않습니다 (임의 순서). 여기 내 코드의 일부입니다자바에서 이미지를 100ms 간격으로 표시합니다.

panel = new ShowImage(Integer.toString(ImageRand+1),kind); // show random images 
//panel.setIgnoreRepaint(false); 
frame.getContentPane().add(panel); 
frame.validate(); 
while(panel.isShowing()!=true); 
panel.setVisible(true); 
start=System.currentTimeMillis(); 
while(System.currentTimeMillis()-start < 100); 

심지어 내가 사용한 nanoTime() 함수하지만 제대로

편집 작동하지 않습니다

나는이 두 줄을 추가하기 전에 :

while (panel.isShowing()! = true);

panel.setVisible(true); 

내 코드는 다음과 같이 보았다 :

패널 = 새로운 ShowImage (가지는 Integer.toString (ImageRand + 1) 종류);

frame.getContentPane().add(panel); 

frame.validate(); 

start=System.currentTimeMillis(); 

while(System.currentTimeMillis()-start < 100); 

는 그냥 화면에 이미지를 표시 한 후 100 밀리 초를 기다리고, 다시이 코드를 실행 (나는 주 프로그램의 시작 부분에 한 번만 각 이미지를로드) 내 문제는 의미 : 간격을 이미지가 서로 같지 않다면 입니다. 그런 다음 추가 (panel.isShowing()! = true); 내 패널이 화면에 있는지 확인하려면 (이 작업을 수행하는 동안 100ms를 기다리기 전에 패널이 화면)하지만 동일한 문제가 있습니다.

+0

이와 같은 루프를 수행하는 동안 또는 의사 코드가되는 동안 정말 굳건한 의도입니까? –

+2

응용 프로그램의 CPU 사용량을 훨씬 줄이려면 비어있는 while 루프 대신 Thread.sleep (100)을 사용하십시오. – Vulcan

+1

잠자기가 아닌 간격의 타이머 사용 ... http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html – Adam

답변

2

타이트한 루프는 아무 것도하지 않습니다. ;을보세요.


이 논리는 무엇입니까? 나는 당신이 의미 있으리라 믿고있어 :

while (!panel.isShowing()) { 
    panel.setVisible(true); 
} 

Component.isShowing()에 대한 설명서에 따르면,이 컴포넌트가 화면에 표시되고 있는지

가 결정합니다. 이것은 구성 요소가으로 표시되어야하며 표시 및 표시되는 컨테이너에 있어야 함을 의미합니다.


그 외에, 당신은 Timer를 사용하여 조사한다. 이벤트 발송 스레드에서 실행되는 ActionListener을 사용하면 UI 구성 요소의 안전한 변형을 사용할 수 있습니다.