2015-01-02 2 views
0

Хорошо, я не мог придумать лучшего названия для моей проблемы.Как добавить ссылку вызывающего метода?

У меня есть таймер. Он галочки и после достаточного количества клещей, я хочу, чтобы он вызывал метод того, что его называл. Если кто-нибудь когда-либо использовали Unity, я пытаюсь сделать это:

public void test(String CallMeLater){ 
    Invoke(CallMeLater); // Unity 
    caller.CallMeLater(); // Idea 
} 

Стоит отметить вещь, назвав его не статичен. Как это сделать?

Вот что у меня есть:

ЧАСЫ

public class Clock extends Thread { 
    Object test; 

    public Clock(int minutes, Object test) { 
     this.minutes = minutes; 
     this.test = test; 
    } 

    public void run() { 
     try { 
     Thread.sleep(1000); 
     } catch(Exception err) {} 

     test.SayHi(); 
     run(); 
    } 
} 

CALLER

public class MainWindow { 
    // When the Clock is created i want to pass "this" into it. 
    app.Clock clock = new app.Clock(60, this); 

    public MainWindow(){ 
     // Creates frame, and add listeners. I cut it out. 
     // It has nothing to do with the problem at hand 
    } 

    private void Set(){ 
     // This is where i start the timer 
     clock.start(); 
    } 

    public void SayHi(){ 
     System.out.println("Hi"); 
    } 
} 
+1

Вы хотите вызвать метод обратного вызова, предположительно, для уведомления о каком-либо виде событий? Затем вам нужна ссылка на объект, который изначально вызывал/запускал таймер ... – MadProgrammer

+0

@MadProgrammer Yep. То, что я хочу делать. То что я спрашиваю как сделать. Как мне ссылаться на объект, который изначально его начал? –

+0

Передайте вызывающий объект в качестве аргумента в этом методе или объявите поле с типом вызывающих этих методов. –

ответ

1

Callbacks являются хорошим примером использования интерфейса.

public Inteface Callback { 
    public void complete(); 
} 

public class Ticker { 
    public void test(Callback callback) { 
     // tick, tick, tick 
     callback.complete(); 
    } 
} 

public class User implements Callback { 
    public void complete() { 
     ... 
    } 

    public void useTicker() { 
     Ticker ticker = new Ticker(); 
     ticker.test(this); 
    } 
} 

Обратите внимание, что Java имеет ряд встроенных закладок, которые выглядят именно так. На самом деле класс Timer имеет хороший пример: TimerTask, который делает именно то, что вы ищете здесь.

+0

Спасибо. Я чувствую себя очень глупо, потому что не знаю о «CallBacks» или о них. Но, тем не менее, я снова не сделаю эту ошибку. –

Смежные вопросы