I want to use speech recognition in my project and I found this code but when I run it I get an error which is:
run: java.lang.NullPointerException at newpackage.HelloWorld.main(HelloWorld.java:55)
Please could one of you help me in this problem?
This is the server code that I use:
package newpackage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.speech.*;
import javax.speech.recognition.*;
import java.io.FileReader;
import java.util.Locale;
public class HelloWorld extends ResultAdapter {
static Recognizer rec;
// Receives RESULT_ACCEPTED event: print it, clean up, exit
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 ex) {
Logger.getLogger(HelloWorld.class.getName()).log(Level.SEVERE, null, ex);
} catch (EngineStateError ex) {
Logger.getLogger(HelloWorld.class.getName()).log(Level.SEVERE, null, ex);
}
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 (Exception e) {
e.printStackTrace();
// System.out.println("the problem");
}
}
}
You'll get a null pointer because even though you're else is handling the case when
rec
is null, you're program continues. You need to return or exit, or something whenrec
is null.Note: Also, I reformatted your code because it's hard to read your if/else. If you're going to use curlies on one branch of your if/else, you should use curlies on both. It makes it more readible.
Edit: Oh yeah, as far as why
createRecognizer
is returningnull
, I'm afraid I don't know.rewrite the
to be as below