2016-08-31 9 views
-1

)、LineListenerのラムダ式

最近では、匿名リスナーをラムダ式に置き換えました。アクションリスナーの場合、これは正常に機能します。

name_button.addActionListener(e->{ 
      gui.game_menu(Saving_Handler.new_game(filenumber, name_field.getText())); 
      namer.dispose(); 
     }); 

しかし、私はいくつかの難しさがあります。これは私が変換したい式です:

私はツイストとターンどう
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

myLineEventは宣言されません。外に宣言すると、コンストラクタに行が必要なため、考えられないようです。 – Abgehter

答えて

0

LineEventを受け取り、返さないラムダ式を定義するだけで済みます。 ifステートメントはラムダ本体の中の単一のステートメント以上になるので、角括弧を付ける必要があります。

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

さて、私は今、それを持っていると思う: – Abgehter