簡體   English   中英

在Java Web Start中運行時,Swing Timer不會停止觸發事件

[英]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所必需的。 可能正在改變時間,足以暴露問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM