当我的表单打开时,它会运行一首歌曲。当我进入我的选项框架并返回到我的主框架时,它会重新运行代码。现在我做了一个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;
}
}
答案 0 :(得分:2)
InputStream和AudioStream应该是某个对象的实例变量。如果它们驻留在函数openedWindow
中,则在函数运行完毕后它们将成为垃圾收集器。
相反,您应该在需要访问它们的类中实例化它们,可能在构造函数方法中。
另外,将声音变量也设为类的实例变量。这样,每次调用openedWindow
时都不会重置。
或者使用布尔标志变量来指示声音是否已播放:
class MyWindowListener implements WindowListener {
boolean soundPlayed = false;
...
public void windowOpened(WindowEvent e) {
if (!soundPlayed) {
// play the sound
soundPlayed = true;
}
}
}