我似乎遇到了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停止触发事件?
答案 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所必需的。 java-web-start可能正在改变时间,足以揭露问题。