編集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 を返します。