2011-08-09 1 views
1

Java Web Start에서 내 응용 프로그램을 올바르게 실행하지 않는 문제가있는 것 같습니다. 애플리케이션으로 코드를 실행하면 (예 : 웹 시작이없는 경우) 다음 코드는 재생중인 사운드의 중지와 애니메이션 중단을 초래합니다.Java Web Start에서 실행될 때 스윙 타이머가 실행 이벤트를 중지하지 않습니다.

if (evt.getSource() == stopButton) 
{ 
    if (clipPlayer != null) 
    { 
     //Stop the sound from playing 
     clipPlayer.stopPlaying(); 
    } 
    for (int i = 0; i < rhythmWheel.NUM_WHEELS; i++) 
    { 
     rhythmWheel.getWheelPanels()[i].wheel.setRotationAngle(0); 
    } 
    //Stop the wheel from rotating. 
    paintTimer.stop(); 
} 

그러나이 코드가 웹 시작을 통해 실행되면 사운드는 재생되지 않지만 애니메이션은 계속됩니다. Timer에서 actionListener를 제거하면 웹 시작시에도 애니메이션이 중단되므로 결과적으로 Timer가 이벤트를 계속 발생시키는 것이 원인이라고 생각합니다.

Java Web Start에서 실행할 때 Timer가 이벤트를 중지하도록 강제로 적용하려면 어떻게합니까?

+0

프로그램에 버그가 있지만 코드의 다른 부분 (여기에 표시되지 않은 코드)에있는 것으로 의심됩니다. –

+0

프로그램에 버그가있을 수 있다고 확신하지만,이 버그가 Java Web Start에서 실행될 때 프로그램에 표시되는 이유와 응용 프로그램으로 실행되지 않는 이유를 알고 싶습니다. –

+0

아직 설명 할 수 없지만 디버그 문을 사용하고 코드를 잘라내어 문제를 격리 할 때까지 프로그램을 단순화 해보십시오. –

답변

2

코드에 캐치되지 않은 예외가 있다고 생각합니다.

우선, javaw를 사용하여 수동으로 JNLP 파일을 호출하여 콘솔에 인쇄되는 것을 볼 수 있습니다. 예 : javaws foo.jnlp.

충분하지 않은 경우 최종 문에 실제로 도달했는지 확인할 수 있도록 print 문 (또는 로깅을 사용할 경우 로그 문)을 추가하십시오. 당신이 볼 경우

"이라고 정지()"

if (evt.getSource() == stopButton) 
{ 
    if (clipPlayer != null) 
    { 
     //Stop the sound from playing 
     clipPlayer.stopPlaying(); 
    } 
    System.out.println("after stopPlaying(). rhythmWheel.NUM_WHEELS=" + rhythmWheel.NUM_WHEELS); 
    for (int i = 0; i < rhythmWheel.NUM_WHEELS; i++) 
    { 
     rhythmWheel.getWheelPanels()[i].wheel.setRotationAngle(0); 
     System.out.println("set " + i + " to 0"); 
    } 
    //Stop the wheel from rotating. 
    paintTimer.stop(); 
    System.out.println("stop() called"); 
} 

을 시도 타이머가 중지해야합니다.

+0

javaws로 jnlp 파일을 실행하는 것에 대해 알려 주셔서 감사합니다. 나중에 유용 할 수도 있습니다. 현재 Java는 애플릿을 실행하기 위해 새로운 VM을 포크하고 터미널에서 출력을 볼 수 없습니다. 그러나 나는 자바 콘솔을 사용할 수있게하고 거기에 예외가 있는지 확인했다. –

+0

나는 당신이 제안한 것을 시도했지만, 캐치되지 않은 예외는 없다는 것을 확인할 수있다. Java 콘솔에 "stop() called"메시지가 인쇄되지만 애니메이션이 멈추지 않습니다. –

+0

흥미 롭습니다. 같은 행동을 보이는 아주 작은 프로그램을 만들 수 있습니까? –

2

Java Web Start에서 실행할 때이 버그가 프로그램에 나타나는 이유를 알고 싶습니다.

event dispatch thread에서 GUI를 구성하는지 확인하십시오. 이것은 스윙 애플릿에도 필요합니다. 은 문제를 드러 낼 정도로 타이밍을 변경했을 수 있습니다.

+0

'SwingUtilities.invokeAndWait'를 사용하여 GUI를 구성 중입니다. 그게 당신이 언급 한 링크가 애플릿을 제안합니다. 'Timer.stop()'을 호출하는 코드가 EDT에서 실행되어야합니까? –

+0

['javax.swing.Timer'] (http://download.oracle.com/javase/6/docs/api/javax/swing/Timer.html)는 EDT에서 청취자에게 알립니다. [sscce] (http://sscce.org/)가 도움이 될 것입니다. – trashgod

+0

동일한 동작을 보여주는 sscce를 함께 사용하려고합니다. –

관련 문제