LineListener

时间:2016-08-31 02:37:18

标签: java lambda

),

这些天我用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()放在一起。

1 个答案:

答案 0 :(得分:0)

您只需要定义一个接受LineEvent但没有返回的lambda表达式。由于if语句使它不仅仅是lambda体中的单个语句,因此需要使用括号。

            clip.addLineListener( myLineEvent -> {
                if (myLineEvent.getType() == LineEvent.Type.STOP) {
                    clip.close();
                }
            });