Исключение в распознавании речи Java

1

Я столкнулся с некоторым исключением в следующем коде:

    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Locale;
    import javax.speech.AudioException;
    import javax.speech.Central;
    import javax.speech.EngineException;
    import javax.speech.EngineModeDesc;
    import javax.speech.EngineStateError;
    import javax.speech.recognition.GrammarException;
    import javax.speech.recognition.Recognizer;
    import javax.speech.recognition.Result;
    import javax.speech.recognition.ResultAdapter;
    import javax.speech.recognition.ResultEvent;
    import javax.speech.recognition.ResultToken;
    import javax.speech.recognition.RuleGrammar;

    public class HelloWorld extends ResultAdapter {

        static Recognizer rec;

        // Receives RESULT_ACCEPTED event: print it, clean up, exit
        @Override
        public void resultAccepted(ResultEvent e) {
            Result r = (Result) (e.getSource());
            ResultToken tokens[] = r.getBestTokens();

            for (int i = 0; i < tokens.length; i++) {
                System.out.print(tokens[i].getSpokenText() + " ");
            }
            System.out.println();

            try {
                // Deallocate the recognizer and exit
                rec.deallocate();
            } catch (EngineException | EngineStateError ex) {
                System.out.println(ex.toString());
            }
            System.exit(0);
        }

        public static void main(String args[]) {
            try {
                // Create a recognizer that supports English.
                rec = Central.createRecognizer(
                        new EngineModeDesc(Locale.ENGLISH));

                // Start up the recognizer
                rec.allocate();

                // Load the grammar from a file, and enable it
                FileReader reader = new FileReader(args[0]);
                RuleGrammar gram = rec.loadJSGF(reader);
                gram.setEnabled(true);

                // Add the listener to get results
                rec.addResultListener(new HelloWorld());

                // Commit the grammar
                rec.commitChanges();

                // Request focus and start listening
                rec.requestFocus();
                rec.resume();
            } catch (IllegalArgumentException | EngineException | SecurityException | GrammarException | IOException | AudioException e) {
                e.printStackTrace();
            }
        }
    }

Исключение: - Исключение в потоке "main" java.lang.NullPointerException на Demo5.HelloWorld.main(HelloWorld.java:55) Java Результат: 1

Исключение произошло в этой строке (строка 55):

// Start up the recognizer
 rec.allocate();
  • 0
    где строка 55 в вашем коде?
  • 0
    почему вы определяете эту переменную static? статический Recognizer rec;
Показать ещё 4 комментария
Теги:
speech-recognition

1 ответ

0

Recognizer представляется нулевым. См. Эту строку:

rec = Central.createRecognizer(new EngineModeDesc(Locale.ENGLISH));

Документы предполагают, что это проблема с аргументами, которые вы предоставляете createRecognizer:

Если Recognizer не имеет необходимых свойств, метод возвращает null.

Что касается фиксации причины нулевого Recognizer, может оказаться полезным второй ответ на этот вопрос.

  • 0
    если вы имеете в виду определение переменной, он уже сделал это, а тип является статическим
  • 0
    Нет, исключение происходит в строке сразу после того, как он присваивает rec значение Central.createRecognizer(new EngineModeDesc(Locale.ENGLISH)); , Проблема с вызовом createRecognizer .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню