1

私は、ネットワーキングの入門クラスのためにP2PTwitterクライアントに取り組んでいます。他のピアがそれを発見できるように、自分のピアに自分自身を登録する方法を提供しようとしています。DNSSD.Register()を呼び出すことができるように、DNSTXTレコードを作成しています。ただし、このメソッドを呼び出すと、次のようなエラーが発生します。

このエラーの原因(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

クアルマヨーコは正しかった。nullのRegisterListenerを渡すと、問題が発生していました。RegisterListenerは、「アナウンサー」と呼ばれる新しいクラスに実装する必要のあるインターフェイスです。このクラスを実装してインスタンス化し、それを最後のパラメーターとして渡すと、私のコードは夢のようにコンパイルされて実行されました。皆さんに感謝し、これが将来の読者に役立つことを願っています!

于 2012-12-02T03:57:17.587 に答える