当我的表单打开时,它运行一首歌。当我进入选项框架并回到主框架时,它会重新运行代码。现在我做了一个while循环,运行正常但问题是我应该在哪里声明初始值?如果我在windowOpened
上声明,它总是重置为0,因此总是再次进行循环。
我在openedWindow
事件中的代码
int sound = 0;
while (sound < 1) {
try
{
InputStream test = getClass().getClassLoader().getResourceAsStream("musics/menu.wav");
AudioStream Audio = new AudioStream(test);
AudioPlayer.player.start(Audio);
}
catch (Exception e){}
sound = sound + 1;
}
}
InputStream和AudioStream应该是某个对象的实例变量。如果它们驻留在函数openedWindow
中,则在函数运行结束后它们将成为垃圾收集器。
相反,您应该在需要访问它们的类中实例化它们,可能在构造函数方法中。
同样,将声音变量也设置为类的实例变量。这样它就不会在每次调用openedWindow
时被重置。
或者使用布尔标志变量来指示声音是否已经播放:
class MyWindowListener implements WindowListener {
boolean soundPlayed = false;
...
public void windowOpened(WindowEvent e) {
if (!soundPlayed) {
// play the sound
soundPlayed = true;
}
}
}