(オーディオとキャプチャ画像とコードを同期させるためにどのように)、私たちが共有することができますので、私の結論に従います私たちの間。
ステップ1_)あなたはDefaultTextProducerを(合格しようとした場合AudioCaptcha元の実装は数字だけを受け入れるように作られた、そう、代わりに使用DefaultTextProducerであり、あなたは、あなたがテストを実行することができますNumberAnswerProducer
TextProducer tp = new NumbersAnswerProducer(4,true);
new AudioCaptcha.Builder()
.addVoice()
.addAnswer(tp)
.build());
を使用する必要があります)AudioCaptchaビルダーに失敗します。キャプチャとAudioCaptcha
の両方に同じTextProducerを共有
ステップ2_が)私は "()。addAnswer(TP)をAudioCaptcha.Builder" についての詳細を理解するためにSimpleCaptchaからGITリポジトリからプロジェクトをクローン化し、 Captcha.Builder(400,100).addText(tp)
これを試すと、TextProducerの同じインスタンスを共有しても表示されます。tp = new NumbersAnswerProducer(4、true);両方のために、あなたはいつも(私は常に信頼しています)、イメージとオーディオの背後にある別のコードを得るでしょう。 なぜですか?
.addAnswer(tp)と.addText(tp)の実装の後で、コードはTextProducerの同じインスタンスであっても.getText()という名前のメソッドを呼び出しているためです。 、
public String getText() {
String capText = "";
for (int i = 0; i < _length; i++) {
capText += _srcChars[RAND.nextInt(_srcChars.length)];
}
return capText;
}
だから、再び、でもTextProducerの同じインスタンスを使用して、あなたは別のコードにあなたが.addAnswer(TP)と.addText(TP)を呼び出すたびになります。そして、これのgetTextは彼の後ろのランダムなコードを持っています彼らの背後にはgetText()が呼び出されるからです。
最後に、解決する方法を見つけたところでは、CaptchaとAudioCaptchaの両方に同じ値を持たせるために、TextProducerの背後にあるgetText()の独自の実装を作成する必要がありました。
よろしくお願いいたします