),
这些天我用lambda表达式替换了匿名侦听器。对于actionlisteners,这很好用:
name_button.addActionListener(e->{
gui.game_menu(Saving_Handler.new_game(filenumber, name_field.getText()));
namer.dispose();
});
但是对于linelistener我有一些困难。这是我想要转换的表达式:
void sound_mission_start()
{
if (sound) {
try {
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(new File("rsc/mission_start.wav")));
clip.start();
clip.addLineListener(new LineListener() {
public void update(LineEvent myLineEvent) {
if (myLineEvent.getType() == LineEvent.Type.STOP) {
clip.close();
}
}
});
}
catch (Exception exc) {
exc.printStackTrace(System.out);
}
}
}
我如何扭转,我无法将LineEvent和if()放在一起。
答案 0 :(得分:0)
您只需要定义一个接受LineEvent但没有返回的lambda表达式。由于if语句使它不仅仅是lambda体中的单个语句,因此需要使用括号。
clip.addLineListener( myLineEvent -> {
if (myLineEvent.getType() == LineEvent.Type.STOP) {
clip.close();
}
});