1

我正在为一个介绍性网络课程开发 P2P Twitter 客户端。我试图给我的同伴一种注册自己的方法,以便其他同伴可以发现它。我正在创建一个 DNS TXT 记录,以便可以调用 DNSSD.Register()。但是,当调用此方法时,我收到一条错误消息:

是什么导致了这个错误(java):“位置 0x0 rip=0x106282bae 的无效内存访问”

这是导致它的方法:

import com.apple.dnssd.*;
    public static void announce()throws com.apple.dnssd.DNSSDException{
        TXTRecord txtRec = new TXTRecord();
        txtRec.set("Version", "1.1");
        txtRec.set("EncryptionSupport", "false");
        txtRec.set("DisplayName", profile.getPropertyValue("UserName"));
        txtRec.set("UserID", profile.getPropertyValue("UserID"));

        RegisterListener myRegisterListener = null;
        DNSSDRegistration reg = null;
        RegisterListener myRegistrationListener = null;
        reg = DNSSD.register
            (0, DNSSD.ALL_INTERFACES, profile.getPropertyValue("UserName"),
            profile.getPropertyValue("DNSSDServiceName"), 
            null, null, 4444, txtRec, myRegistrationListener);
    }

“reg = ...”行是导致错误发生的行。关于我做错了什么的任何想法?其中很多内容来自我不完全理解的示例。

4

2 回答 2

6

问题是 DNSSD.register() 方法的最后一个参数应该是一个有效的对象。由于您将它作为 NULL 指针传递,因此当它被调用时,您将获得对 0x0 位置的无效访问。

查看此方法的文档

于 2012-12-02T02:29:42.960 回答
0

KuarmaYoko 是对的。传递一个空的 RegisterListener 导致了这个问题。RegisterListener 是一个接口,我必须在一个名为“Announcer”的新类中实现它。当我实现这个类,实例化它,并将它作为最后一个参数传递时,我的代码像梦一样编译和执行。谢谢大家,希望这对未来的读者有所帮助!

于 2012-12-02T03:57:17.587 回答