java事件,处理程序和监听器的问题

编辑:在我的意见中,我实际上能够让这个工作和形成一个很好的例子。 接受的答案就是我的例子,如果您需要帮助或有建议,请随时发表评论。

我是java的新手,刚刚介绍过事件,处理程序和监听器。 我在网上找到了3个很好的参考资料,但是,我仍然没有看到我如何实现这个来解决我的问题。 (另外,这是在android上开发的。我怀疑这会改变这个例子,但我想我会告诉你)

我发现有用的网站链接:
快乐的对象
示例仓库
java世界

这是我需要的,使用任意名称和示例,而不是在这里填写我的数百行代码:

这是我的class级及其用途:
MainUI – 这将创建UI
连接 – 此类执行与套接字的连接并开始接收数据
DataRobot – 此类对接收的数据执行计算,并决定如何处理它
DataBuilder – 此类从数据机器人收集数据,一旦达到一定数量,它就会将该块发送到远程数据库
DataSender – 此类发送由databuilder发送给它的数据

我用线程来实现这个… =(
我认识的人建议我使用事件。 他给了我一个很好的解释,然而,它是在30分钟内,我没有看到我如何实现它而没有看到一些更好的例子(他也是从C#背景说)。 我想知道是否有人在java中有一些很好的经验可以使用我上面的东西并告诉我我需要做什么。

以下是我计划出的事件:
dataReceived – 此事件发生在connect中,此事件在此事件触发时连接接收数据时触发,它将数据发送到数据机器人handler()函数。
dataAnalyzed – 这个事件发生在datarobot中,当datarobot完成处理给它的数据时会触发此事件,当此事件触发时,它会将数据发送到数据库
dataBuilder – 此事件发生在databuilder中,当databuilder收到一定数量并准备发送数据时会触发此事件,当此事件触发时,它会将数据发送到数据库。

我在这里寻找一个例子或至少讨论应该做些什么。 我找到的一个例子是“happyfaceobject”的例子,它非常好。 但是,我仍然无法在我的设计中实现它,因为我对java和事件非常新。 请尽可能帮助我,我们将不胜感激。 这个例子也可以帮助整个社区,因为缺少很棒的java事件示例。

在此先感谢,如果您需要更多信息,请告诉我们。

你是Java的新手 – 我认为你过于复杂,并试图一次吞下太多。

忘记你的宏伟设计。 忘了UI。 忘了Android。

从玩具问题开始并建立起来。

你能创建一个响应Event的侦听器类和生成器类来发送该事件吗? 你能看到正在采取的行动吗? 如果你不能这样做,你就不会走得太远。 如果你有一个工作,移动到下一个,看看你是否可以让你的设计使用这些更简单的对象。 只有当整个工作正常时,您才会担心绑定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; } }