簡體   English   中英

java事件,處理程序和偵聽器的問題

[英]java events,handlers and listeners question

編輯:根據我的看法,實際上我能夠使它工作並形成一個很好的例子。 接受的答案是我的榜樣,如果您需要幫助或建議,請隨時發表評論。

我對Java非常陌生,並且剛剛被介紹給事件,處理程序和偵聽器。 我在網上找到了3個很好的參考資料,但是,我仍然沒有看到如何實現這一點來解決我的問題。 (此外,這是在android上開發的。我懷疑這會改變示例,但以為我會讓您知道)

我發現有幫助的網站鏈接:
快樂的對象
倉庫示例
Java世界

這就是我所需要的,使用任意名稱和示例,而不是在此處放置數百行代碼:

這是我的課程及其用途:
MainUI-這將創建UI
Connect-此類執行與套接字的連接並開始接收數據
DataRobot-此類對接收到的數據執行計算並決定如何處理它
DataBuilder-此類從datarobot收集數據,一旦達到一定數量,它將將該塊發送到遠程數據庫
DataSender-此類發送由databuilder發送給它的數據

我正在用線程實現這個... =(
我認識的某個人建議我使用事件。 他給了我一個很好的解釋,但是,那是在30分鍾之內的,而且我看不到如何在沒有看到一些更好的示例的情況下實現它(他也是從C#的背景出發)。 我想知道是否有人在Java方面有很好的經驗,可以使用我上面的內容,告訴我我需要做什么。

這是我計划的活動:
dataReceived-此事件發生在connect中,當connect接收到數據時觸發此事件,當該事件觸發時,該事件會將數據發送到數據機械手handler()函數。
dataAnalyzed-此事件發生在datarobot中,當datarobot處理完給它的數據時觸發此事件,觸發此事件時將數據發送到databuilder
dataBuilder-此事件在databuilder中發生,當databuilder收到一定數量並准備發送數據時將觸發此事件,當此事件觸發時,它將數據發送至datasender。

我在這里尋找一個例子,或者至少在討論應該做什么。 我發現的示例之一是“ happyfaceobject”示例,它非常好。 但是,由於我對Java和事件非常陌生,因此在我的設計中仍難以實現它。 請在可能的情況下為我提供幫助,我們將不勝感激。 由於缺少出色的Java事件示例,因此該示例也將對整個社區有所幫助。

在此先感謝您,如果您需要更多信息,請告訴我。

您是Java的新手-我認為您過於復雜了,嘗試一次吞咽太多。

忘記您的宏偉設計。 忘記UI。 忘了Android。

從玩具問題開始,並逐步建立起來。

您能否制作一個響應事件的偵聽器類和一個生產者類以將該事件發送出去? 您看到采取的措施了嗎? 如果您不能做到這一點,您將走不遠。 當一個工作完成時,移至下一個工作,看看是否可以使設計與這些較簡單的對象一起工作。 只有當整個事情都正常進行時,您才需要擔心綁定Android和UI元素。

從簡單的POJO模型開始,您將獲得更快的速度。

我已經完成了這項工作,這似乎是一個很好的例子。 我將在下面發布代碼,希望有一天能對某人有所幫助! = D請如果您看到我做錯了什么,或者知道更好的方法,請發表一些評論,以便我糾正。 謝謝

基本上,要創建的每個事件都需要一個事件對象偵聽器接口AddListener函數RemoveListener函數FireEvent函數偵聽器 所有這些都可以在下面的示例中看到。 如有任何疑問,請在評論中發表,如果對您有幫助,請隨時投票! = P

/* SmartApp.java */
public class SmartApp extends Activity 
{
    private ConnectDevice cD = new ConnectDevice();
    private DataRobot dR = new DataRobot();
    private DataBuilder dB = new DataBuilder();
    private DataSender dS = new DataSender();
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.intro);

    cD.addDataReceivedListener(new DataReceivedListener() {
        @Override
        public void dataReceivedReceived(DataReceivedEvent event) {
            // TODO Auto-generated method stub
            dR.analyzeData(event.getData());
        }
    });
    dR.addDataAnalyzedListener(new DataAnalyzedListener() {
        @Override
        public void dataAnalyzedReceived(DataAnalyzedEvent event) {
            // TODO Auto-generated method stub
            dB.submitData(event.getData());
        }
    });
    dB.addDataBuilderListener(new DataBuilderListener() {
        @Override
        public void dataBuilderReceived(DataBuilderEvent event) {
            // TODO Auto-generated method stub
            dS.sendData(event.getData());
        }
    });
      }
}  

/* ConnectDevice.java
 * This class is implementing runnable because i have a thread running that is checking
 * the contents of a socket. Irrelevant to events. */
public class ConnectDevice implements Runnable {

    private List _listeners = new ArrayList();
    private String data;

    /* Constructor */
    public ConnectDevice() {// does some socket stuff here, irrelevant to the events}
    public void run() {// does some socket stuff here, irrelevant to the events}

    public synchronized void addDataReceivedListener(DataReceivedListener listener) {
        _listeners.add(listener);
    }
    public synchronized void removeDataReceivedListener(DataReceivedListener listener) {
        _listeners.remove(listener);
    }
    private synchronized void fireDataReceivedEvent(String temp) {
        DataReceivedEvent dRE = new DataReceivedEvent(this, temp);
        Iterator listeners = _listeners.iterator();
        while(listeners.hasNext()) {
            ((DataReceivedListener)listeners.next()).dataReceivedReceived(dRE);
        }
    }
    public interface DataReceivedListener {
        public void dataReceivedReceived(DataReceivedEvent event);
    }
}  

/* DataRobot.java */
public class DataRobot {
    /* This class is for analyzing the data */
    private List _listeners = new ArrayList();
    private String data;
    public boolean analyzeData(String temp) {
        /* Analyze the data
         * This function analyzes the data, as explained in the OP
         * This function fires the analyzed data event when finished
             * analyzing the data.
         */
        data = temp;
        fireDataAnalyzedEvent(data); // this fires the dataanalyzedevent
        return true; //for now this will always return true
    }

    public synchronized void addDataAnalyzedListener(DataAnalyzedListener listener) {
        _listeners.add(listener);
    }
    public synchronized void removeDataAnalyzedListener(DataAnalyzedListener listener) {
        _listeners.remove(listener);
    }
    private synchronized void fireDataAnalyzedEvent(String temp) {
        DataAnalyzedEvent dRE = new DataAnalyzedEvent(this, temp);
        Iterator listeners = _listeners.iterator();
        while(listeners.hasNext()) {
            ((DataAnalyzedListener)listeners.next()).dataAnalyzedReceived(dRE);
        }
    }
    public interface DataAnalyzedListener {
        public void dataAnalyzedReceived(DataAnalyzedEvent event);
    }
}  

/* DataBuilder.java */
public class DataBuilder {
    private List _listeners = new ArrayList();
    private String data;
    public boolean submitData(String temp) {
            /* Builds the data
             * This function builds the data, as explained in the OP
             * This function fires the databuilder data event when finished
                     * building the data.
             */
        data = temp;
        fireDataBuilderEvent(data); //firing the databuilder event when finished
        return true;
    }
    public synchronized void addDataBuilderListener(DataBuilderListener listener) {
        _listeners.add(listener);
    }
    public synchronized void removeDataBuilderListener(DataBuilderListener listener) {
        _listeners.remove(listener);
    }
    private synchronized void fireDataBuilderEvent(String temp) {
        DataBuilderEvent dRE = new DataBuilderEvent(this, temp);
        Iterator listeners = _listeners.iterator();
        while(listeners.hasNext()) {
            ((DataBuilderListener)listeners.next()).dataBuilderReceived(dRE);
        }
    }
    public interface DataBuilderListener {
        public void dataBuilderReceived(DataBuilderEvent event);
    }
}  

/* DataSender.java */
/* this class has no event, because it is done firing events at this point */
public class DataSender {
    private String data;
    public boolean sendData(String temp) {
        data = temp;
        return true;
    }
}  

下面是每個事件的事件對象。 我將每個定義在一個單獨的文件中,不知道這是否是一個好的過程。

/* DataReceivedEvent.java */
public class DataReceivedEvent extends EventObject{
    private String data;
    public DataReceivedEvent(Object source, String temp) {
        super(source);
        // TODO Auto-generated constructor stub
        data = temp;
    }
    public String getData() {
            // this function is just an accessor function
        return data;
    }
}  

/* DataAnalyzedEvent.java */
public class DataAnalyzedEvent extends EventObject{
    private String data;
    public DataAnalyzedEvent(Object source, String temp) {
        super(source);
        // TODO Auto-generated constructor stub
        data = temp;
    }
    public String getData() {
            // this function is just an accessor function
        return data;
    }
}  

/* DataBuilderEvent.java */
public class DataBuilderEvent extends EventObject {
    private String data;
    public DataBuilderEvent(Object source, String temp) {
        super(source);
        // TODO Auto-generated constructor stub
        data = temp;
    }
    public String getData() {
            // this function is just an accessor function
        return data;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM