2011-08-09 88 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。 –