2010-11-18 19 views
2

Değişkenleri bir eylemlistenize son olarak çağırmadan geçirebilmemin bir yolu var mı? Bu iki noktayı zamanlanmış bir şekilde kullanmak istiyorum ... Thread.sleep() 'ı denedim ama bazı sebeplerden dolayı programın geri kalanıyla iyi uyum sağlamadı. Kullanmak istediğim format bu, ama çalışmasını sağlamak imkansız olabileceğinin farkındayım. Herhangi bir tavsiyeye açığım. Teşekkürler! Değişkenleri bir Java ActionListener'e geçirme?

(Bu aptal soru ise ben bir cevap baktım ama sadece birini bulmak için görünmüyor olabilir, üzgünüm.) Birkaç şeyler yapabilirdi

public void timedMain(Point current, Point wanted){ 
      ActionListener taskPerformer = new ActionListener(){ 
       public void actionPerformed(ActionEvent evt){ 
        System.out.println(wanted+" "+current);}}; 
        actiontimer = new Timer(delay, taskPerformer); 
        actiontimer.start();} 

cevap

4

Bunu, parametrelerin nihai olarak bildirilmesinden kaçınarak yapabilirsiniz. Böylece

public void timedMain(Point current, Point wanted) { 
     final Point c = current; 
     final Point w = wanted; 
     ActionListener taskPerformer = new ActionListener(){ 
      public void actionPerformed(ActionEvent evt){ 
       System.out.println(w + " " + c);}}; 
       actiontimer = new Timer(delay, taskPerformer); 
       actiontimer.start();} 

Yoksa current türlerini değiştirebilir ve wanted onlar Point sahipleri değişken olduğunu ve sahipleri mevcut değerlerinde actionPerformed yöntem göz.

Ancak iç sınıfı bildirmek için bir yöntem, bir kapsayıcı yöntem kapsamındaki bir değişkende yapılan değişiklikleri görebilmenin bir yolu yoktur ... eğer yapmaya çalıştığınız buysa.

+0

Bu, bu kod snippet'ini kullanmayı amaçladığım için gayet iyi görünüyor. Zamanında yanıtın için teşekkürler, sen bir cankurtaransın. – whuff739

1

  • bir (özel statik) iç sınıfa anonim eylem dinleyici teşvik ve kurucusuna argümanları geçebileceği

  • anonim bir eylem li inşa edilmiş bir fonksiyon tanımlayabilirsiniz

    STENER, kodunuzda zaten iç ve sadece olsa, onlara 'nihai' işareti nesi var

nihai o işleve parametreler yapmak yerine?

+0

Zamanında yanıt verdiğiniz için teşekkürler ... Anonim eylem dinleyicilerine bakmadım, şu anda ona bakıyorum. – whuff739

+0

'taskPerformer' adınız Anonim bir eylem dinleyicidir. Yani 'yeni ActionListner() {...}' a gittiğinizde ve alt sınıfın bir (kaynak kod adı) isminde olmadığında yeni bir ActionListner alt sınıfı vardır. –

İlgili konular