[英]Swing Timer doesn't stop firing events when run in Java Web Start
我似乎遇到了Java Web Start無法正確運行我的應用程序的問題。 當我將代碼作為應用程序運行時(即沒有Web啟動),以下代碼會導致正在播放的聲音停止,並停止動畫。
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();
}
但是,當此代碼通過Web啟動運行時,聲音將停止播放,但動畫將繼續。 我認為這是由於Timer繼續觸發事件引起的,因為從Timer中刪除actionListener會導致動畫在Web啟動時停止。
在Java Web Start中運行時,如何強制應用程序使Timer停止觸發事件?
我相信你的代碼中有一個未被捕獲的異常。
首先,學習使用javaws手動調用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");
}
如果你看到“停止()調用”,計時器應該停止。
我想知道為什么在Java Web Start下運行時程序中會出現這個錯誤。
驗證您是否在事件派發線程上構建GUI。 這也是Swing applet所必需的。 java-web-start可能正在改變時間,足以暴露問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.