2011-08-09 90 views
1

我似乎遇到了Java Web Start的問題,無法正確運行我的應用程序。當我將代碼作爲應用程序運行時(即無需web啓動),以下代碼將導致正在播放的聲音停止並停止播放動畫。在Java Web Start中運行Swing Timer不會停止觸發事件

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繼續觸發事件引起的,因爲從Timer中移除actionListener會導致動畫在web start中停止。

如何在Java Web Start中運行時強制應用程序使Timer停止觸發事件?

+0

我懷疑你的程序有一個錯誤,但它是在你的代碼的另一部分,在代碼中沒有顯示。 –

+0

雖然我確定該程序可能有錯誤,但我想知道爲什麼在Java Web Start下運行時程序出現在程序中,而不是在作爲應用程序運行時出現。 –

+0

我也無法解釋它,但我建議您使用調試語句並嘗試削減代碼,嘗試簡化程序直至找出問題。 –

回答

2

我相信你的代碼中有一個未被捕獲的異常。

首先,學會使用javaws手動調用您的JNLP文件,以便您可以看到打印到控制檯的內容。例如。 javaws foo.jnlp

如果這還不夠,那麼添加打印語句(或者如果您使用日誌記錄則添加日誌語句),以便您可以看到實際達到的最終語句。

嘗試

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來運行小程序,我看不到終端中的輸出。但是我啓用了Java控制檯,並且我一直在檢查異常。 –

+0

我嘗試了你的建議,但我可以確認沒有未捕獲的異常。我看到在java控制檯中打印了「stop()called」消息,但動畫並未停止。 –

+0

有趣。你能創建一個顯示相同行爲的非常小的程序嗎? –

2

我想知道爲什麼在Java Web Start下運行時程序出現在程序中。

確認您正在構建event dispatch thread上的GUI。這對於Swing小程序也是必需的。 可能正在改變剛剛暴露問題的時機。

+0

我正在使用'SwingUtilities.invokeAndWait'構建GUI。那就是你提到的關於applet的鏈接。調用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。 –