0

私は音声認識システムを持っています。これがlisten(button)機能です

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                       

    // TODO add your handling code here:

    jButton1.setIcon( loading_icon );
    microphone.startRecording()
    jButton1.setIcon( speak_icon );

    System.out.println("Start speaking. Press Ctrl-C to quit.\n");

    result = recognizer.recognize();
    if (result != null) {
         String bestfinalnofiller = result.getBestFinalResultNoFiller();
         String hypothesis = result.getBestPronunciationResult();
         String getresult = result.getBestResultNoFiller();

         System.out.println("You said: " + bestfinalnofiller + '\n');
         System.out.println("You said: " + hypothesis + '\n');
         System.out.println("You said: " + getresult + '\n');

    } else {

    } 
}      

私の結果は次のようになります:ボタンアイコンは同じままで、作業が完了すると変更されます作業が文字列になっている間、システムは印刷されます"start speaking..."

recognizer.recognize()関数:

public Result recognize(String referenceText) throws IllegalStateException {

    Result result = null;
    checkState(State.READY);
    try {
        setState(State.RECOGNIZING);
        result = decoder.decode(referenceText);
    } finally {
        setState(State.READY);
    }
    return result;

}

追加しようとしました:

SwingUtilities.invokeLater

うまくいきませんでした。助けてください。計算中にボタンのアイコン画像を変更したいのですが...

4

1 に答える 1

2

これはブロッキング メソッドである可能性がrecognizer.recognize()あります。つまり、終了するまで戻りません。

これが意味することは、メソッドが戻るまで、ペイント要求の処理などを担当するイベント ディスパッチ スレッドをブロックしていることです。

これは、メソッドが戻るまで、何も描画または更新 (または応答) できないことを意味します。

簡単な解決策は、 を使用するSwinWorkerことです。これにより、ブロッキング呼び出しを実行するためにバックグラウンド プロセスを設定できますが、EDT を介して UI への更新を同期するいくつかのメソッドも提供されます。

詳細については、SwingSwimmingWorkerの同時実行を詳しく見てください。

于 2014-04-07T21:44:08.117 に答える