2016-10-02 71 views
-2

首先,我是Java新手,對此我還不太瞭解。我剛剛提出了這個新想法。自動調用未知類的方法

比方說,我有一個方法methodCondition(String,String,String)我想放在任何課堂上。

代碼的情況是下面:

當一切都開始

public class MainClass{ 

    public static void main(String... args) 
    { 
     //Whe everything started, call StartFunction from proccesshelper class to Start a Thread. 
     ProccessHelper phelper = new ProccessHelper(); 
     phelper.StartFunction(); 
    } 

    public void methodCondition(String data1, String data2, String data3){ 
     //Do something about the data when this method is fire from Thread 
    } 
} 

類,其中函數可以調用

public class ProccessHelper{ 

    //Some function here 

    public void StartFunction(){ 

     MyThread mythread = new MyThread(); 
     Thread t = new Thread(mythread); 
     t.start(); 
    } 

    //Some function here 
} 

線程其中methodCondition(String,String,String)能夠發射

public class MyThread implements Runnable { 

    volatile boolean StopThread = false; 
    public MyThread(){} 

    public void Stop(boolean stopThread){ 
     this.StopThread = stopThread; 
    } 

    public void run(){ 
     if(dontLoop){ 
      while(true){ 
       if(condition = true){ 
        /* 
        * if the condition here is true then call "eventMethod" from any unkown class. 
        */ 
        methodCondition(String data1, String data2, String data3); 
       } 
      } 
     } 
    } 
} 

所以我的問題是,它是可能的MyThread可以在任何類的地方是註冊只是喜歡聽,並等待被呼叫呼叫methodCondition(String,String,String)

就像我所說的,我在Java中還不知道很多,我不知道這是什麼功能,或者如果這是可能的,我只是想出了這個想法。 因此,如果任何人都可以告訴,解釋或提供任何參考鏈接,以瞭解我正在努力達到的目標,這將非常感激。我也接受任何澄清。謝謝!

+0

如Swing確實使用監聽系統。 – immibis

+0

聽起來像觀察者模式,有很多東西在網上找到。 – Turo

+1

[StackOverflow](http://stackoverflow.com/)中的人應該查看[Vote Down](http://stackoverflow.com/help/privileges/vote-down)的用途。 – lopi

回答

0

首先,我想說如果有人認爲這個問題全部是關於multithreading的話,對不起。即使我因爲像我這樣的beginner不清楚的問題而投票也沒關係。這個問題是我想要的,但我不知道它到底是什麼,因爲我對Java還沒有太多瞭解。

第二次感謝@GhostCat的回答。我真的很感激它,即使答案不是我想要的,我重複說這是我的錯,因爲問題不清。

第三,我在不同的forum中做了很多問題,以找出我想要的。

經過很多問題我很高興找到它,它被稱爲Invoking Methods。並且要清楚,我真正想要的是從未知類中找到具體名稱method,如果它存在,則調用它來觸發特定任務。

另外,我已經做了代碼如下,它的工作:

Class c=Class.forName("MainActivity"); 
Method m=c.getMethod("methodCondition", String.class, String.class, String.class); //The method has 3 String paramaters so I have to intialize it otherwise it will produce an error that the method was not found. 
Object t = c.newInstance(); 
m.invoke(t,"Hello Word!", "this is", "to Invoke Method"); //Now invoke the method with the value or paramaters. 

現在我知道了。:-)

0

如果要從任何類調用methodCondition,則必須聲明爲靜態方法。可以在不實例化容器類的情況下調用靜態方法。

public static void methodCondition(String data1, String data2, String data3){ 
    //Do something about the data when this method is fire from Thread 
} 

聲明後像靜態你可以直接把它叫做:

MainClass.methodCondition(...); 

所有類都必須在同一個包,或導入MainClass要使用methodCondition。

0

如果您不知道類名稱,最好將它放在interface中,並將該接口作爲線程的輸入並從接口引用調用它。此方法可以是線程內部的,也可以是普通的接口。下面是帶內部接口的例子。

線程代碼:

class MyThread implements Runnable { 

    interface interfaceName { 
     void methodName(String data1, String data2, String data3); 
    } 

    interfaceName interfaceReference = null; 

    // Other members declaration 

    private MyThread(interfaceName obj) { 
     interfaceReference = obj; 
    } 

    public static MyThread getInstance(interfaceName obj) { 
     if (obj == null) { 
      throw new NullPointerException(); 
     } 
     return new MyThread(obj); 
    } 

    public void run() { 
     // Do your stuff 
     interfaceReference.methodName("", "", ""); 
     // Do your stuff 
    } 
} 

其他類實例:

public class Temp implements MyThread.interfaceName { 

    public static void main(String[] args) { 
     Temp t = new Temp(); 
     MyThread mt = MyThread.getInstance(t); 
    } 

    public void methodName(String data1, String data2, String data3) { 
     // Do your stuff 
    } 
} 
相關問題