Java中的C#等价事件
我已经在C中开发了一个基于PC的API,用于与嵌入式电子设备通信。此API读取PC COM端口、解码数据包、构造数据包并引发事件。现在我需要在Android mobile中开发相同的API。由于C#和Java事件之间存在差异,我很困惑如何在Java中实现相同的功能 以下C#代码引发事件:Java中的C#等价事件,c#,java,migration,C#,Java,Migration,我已经在C中开发了一个基于PC的API,用于与嵌入式电子设备通信。此API读取PC COM端口、解码数据包、构造数据包并引发事件。现在我需要在Android mobile中开发相同的API。由于C#和Java事件之间存在差异,我很困惑如何在Java中实现相同的功能 以下C#代码引发事件: public class MARGserial { dataObject = BT_DeconstructPacket(encodedPacket); if (dataObject != nu
public class MARGserial
{
dataObject = BT_DeconstructPacket(encodedPacket);
if (dataObject != null) // if packet successfully deconstructed
{
OnMARGdataReceived(dataObject);
if (dataObject is RawMARGdata)
{
OnRawMARGdataReceived((RawMARGdata)dataObject);
PacketsReadCounter.RawMARGdataPackets++;
}
}
public delegate void onRawMARGdataReceived(object sender, RawMARGdata e);
public event onRawMARGdataReceived RawMARGdataReceived;
protected virtual void OnRawMARGdataReceived(RawMARGdata e)
{
if (RawMARGdataReceived != null)
RawMARGdataReceived(this, e);
}
}/*End of MARGserial class */
以下代码用于订阅windows控制台应用程序中的事件OnRawMARGdataReceived
public static MARG_api.MARGserial MARGserial = new MARG_api.MARGserial("COM44");
MARGserial.RawMARGdataReceived += new MARG_api.MARGserial.onRawMARGdataReceived(MARGserial_RawMARGdataReceived);
static void MARGserial_RawMARGdataReceived(object sender, MARG_api.RawMARGdata e)
{
Console.WriteLine("Data : " + e.Accelerometer[0].ToString() + " "+e.Accelerometer[1].ToString()+ " "+e.Accelerometer[2].ToString());
}
对于Android Java应用程序,应用程序本身的主活动类必须订阅在另一个类线程内触发的事件(该线程读取Bluetooth buffer&Constructions数据包)如果您未使用“Swing”之类的GUI工具包然后,在Java中,侦听器模式对于此类任务非常常见 也就是说,您有一个在主机上注册自身的侦听器,而主机又拥有一个侦听器列表。如果发生了与侦听器对应的事件,则会通知侦听器 这和我们的计划非常相似
这可能会有所帮助。如果您没有使用像“Swing”这样的GUI工具包,那么在Java中,侦听器模式对于此类任务非常常见 也就是说,您有一个在主机上注册自身的侦听器,而主机又拥有一个侦听器列表。如果发生了与侦听器对应的事件,则会通知侦听器 这和我们的计划非常相似
也许这会有所帮助。您可以在此处使用设计模式,尤其是观察者: 在Observer中,您有一个名为IObserver的接口,该接口带有一个名为update()的方法,您可以实现所有感兴趣的对象。然后主对象存储一组s,当发生某些事情时,它会对集合中的每个对象调用.update()(本质上是回调)。当模型状态发生变化且视图需要更新时,如果您希望GUI采用这种方式,这在MVC体系结构中也很常见 您还可以使用命令设计模式实现委托风格的一阶函数,这在Java中非常有用,因为这个概念没有本机支持
我不确定上述内容是否对您的特定环境有帮助,但设计模式通常是解决各种问题的好方法。您可以在此处使用设计模式,尤其是观察者: 在Observer中,您有一个名为IObserver的接口,该接口带有一个名为update()的方法,您可以实现所有感兴趣的对象。然后主对象存储一组s,当发生某些事情时,它会对集合中的每个对象调用.update()(本质上是回调)。当模型状态发生变化且视图需要更新时,如果您希望GUI采用这种方式,这在MVC体系结构中也很常见 您还可以使用命令设计模式实现委托风格的一阶函数,这在Java中非常有用,因为这个概念没有本机支持 我不确定上述内容是否对您的特定环境有帮助,但设计模式通常是解决各种问题的好方法。请查看- 请查看-
我成功开发了android应用程序,可以使用谷歌提供的示例连接到我的蓝牙设备。设备的蓝牙模块具有SPP(串行端口配置文件),该配置文件来自。我成功开发了android应用程序,可以使用谷歌提供的示例连接到我的蓝牙设备。设备的蓝牙模块具有SPP(串行端口配置文件),它来自。它应该是Swing而不是Swing。它应该是Swing而不是Swing。事件不是Java中的语言功能。这个答案很好地概括了这一点:事件不是Java的语言特性。这个答案很好地概括了这一点:您提到了命令模式。OP可能会在这里找到关于这个的更多信息:(仅供参考)您提到了命令模式。OP可能会在这里找到关于这个问题的更多信息:(仅供参考)这是如何回答“Java中的C#等价事件”的问题?抱歉误解了这个问题。这是如何回答“Java中的C#等价事件”的问题?抱歉误解了这个问题。