2

編集2:間違いを見つけました。コンストラクターで Shareable オブジェクトを初期化しようとしました。その時点では、クライアントの登録メソッドはまだ呼び出されていないため、JCRE にはその AID がありません。私のサーバーの getShareableInterfaceObject(AID clientaid, byte parameter) メソッドは、クライアントの AID を != null にする必要はありませんが、JCRE はクライアントに対してこのメ​​ソッドを呼び出すため、おそらく必要です。最初の APDU を処理するときに Shareable オブジェクトを初期化すると、それが機能するようになりました。

ところで、私の投稿の書式設定を手伝ってくれた owlstead に感謝します。間違いなく読みやすくなりました!


私は Java Card 開発に不慣れで、Shareableインターフェースを機能させることができません。

クライアント アプレットが使用したい関数を宣言するインターフェイス クラスがあります。私のサーバー アプレットはこのクラスを実装しています。私のクライアント アプレットは AID を検索し、 を呼び出してインターフェイスを取得しようとしますgetAppletShareableInterface()。しかし、これは常に を返しますnull

私のサーバー アプレットgetShareableInterface()は だけreturn this;で構成されているため、問題は別の場所にあると思います。しかし、どこにあるのかわかりません。

JCWDE を使用してコードをステップ実行していると、サーバー アプレットの呼び出しが登録されているので、クライアント アプレットがそれを見つけることができるはずです。何がうまくいかないのか、誰かが私にいくつかの指針を教えてもらえますか?

編集:

public interface IF extends Shareable {
    public void method();
}

public class Server extends Applet implements IF {
    public getShareableInterfaceObject {
        return this;
    }
}

public class Client extends Applet {

    private Client() {
        AID ServerAID = JCSystem.lookupAID(byteArrayAID, (short)0, (byte)byteArrayAID.length);
        interface = (IF)JCSystem.getAppletShareableInterfaceObject(ServerAID, (byte)0x00);
    }

    public void process(APDU apdu) {
        interface.method();
    }
}

lookupAID は正しい AID を返しますが、サーバー アプレットが存在しないかのように getAppletShareableInterfaceObject は null を返します。

4

1 に答える 1

3

間違いを見つけました。コンストラクターで Shareable オブジェクトを初期化しようとしました。その時点では、クライアントの登録メソッドはまだ呼び出されていないため、JCRE にはその AID がありません。サーバーの getShareableInterfaceObject(AID clientaid, byte parameter) メソッドでは、クライアントの AID を != null にする必要はありませんが、JCRE はクライアントに対してこのメ​​ソッドを呼び出すため、おそらく必要です。最初の APDU を処理するときに Shareable オブジェクトを初期化すると、それが機能するようになりました。

于 2012-10-04T08:03:26.920 に答える