在Java Web Start中运行时,Swing Timer不会停止触发事件

时间:2011-08-09 07:15:55

标签: java swing 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停止触发事件?

2 个答案:

答案 0 :(得分:2)

我相信你的代码中有一个未被捕获的异常。

首先,学习使用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");
}

如果看到“stop()调用”,则计时器应该停止。

答案 1 :(得分:2)

  

我想知道为什么在Java Web Start下运行时程序中会出现这个错误。

确认您正在event dispatch thread上构建GUI。这也是Swing applet所必需的。 可能正在改变时间,足以揭露问题。