Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的C#等价事件_C#_Java_Migration - Fatal编程技术网

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

我已经在C中开发了一个基于PC的API,用于与嵌入式电子设备通信。此API读取PC COM端口、解码数据包、构造数据包并引发事件。现在我需要在Android mobile中开发相同的API。由于C#和Java事件之间存在差异,我很困惑如何在Java中实现相同的功能

以下C#代码引发事件:

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#等价事件”的问题?抱歉误解了这个问题。