シンプルな Speech Recognizer JSAPI (JSR 113) をhere (このリンクは現在機能しません) またはhereでそのライブラリの例に従って試しましたが、java.lang.NullPointerException が発生しました。エラーは、「rec.allocate();」という行が原因でした。レコグナイザーに上の行が割り当てられているため、なぜ発生したのですか ("rec = (Recognizer) EngineManager.createEngine(mode);")?
コードは以下のとおりです。
import javax.speech.*;
import javax.speech.recognition.*;
...
static Recognizer rec;
...
public static void run(String[] args) {
try {
RecognizerMode mode = new RecognizerMode(new SpeechLocale("en", "GB"));
rec = (Recognizer) EngineManager.createEngine(mode);
// Start up the recognizer
rec.allocate();
// Load the grammar, and enable it
String grammarMarkup =
"<grammar root='sentence' xml:lang='en' version='1.0' " +
"xmlns='http://www.w3.org/2001/06/grammar'>" +
"<rule id='sentence' scope='public'>" +
"<one-of>" +
"<item> hello world </item>" +
"<item> good morning </item>" +
"<item> hello mighty computer </item>" +
"</one-of>" +
"</rule>" +
"</grammar>";
rec.getGrammarManager().loadGrammar("grammar:STT", null, grammarMarkup);
// Add the listener to get results
rec.addResultListener((ResultListener) new STT());
// Request focus and start listening
rec.requestFocus();
rec.resume();
rec.waitEngineState(Engine.DEALLOCATED);
} catch (Exception e) {
e.printStackTrace();
}
}