我正在尝试使用java内置语音但是每当我尝试使用它时,当我调用synth.allocate时它会给我一个空指针异常。我在网上看了一些例子,但我仍然得到同样的错误,我看不出我做错了什么
JButton button = new JButton();
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
try {
Synthesizer synth = Central.createSynthesizer(
new SynthesizerModeDesc(Locale.ENGLISH));
synth.allocate();
synth.resume();
synth.speakPlainText("Hello, world!", null);
synth.waitEngineState(Synthesizer.QUEUE_EMPTY);
synth.deallocate();
} catch (Exception e) {
e.printStackTrace();
}
}
});
答案 0 :(得分:2)
您的系统可能没有安装Locale.ENGLISH的合成器。这反过来会导致Central.createSynthesizer()返回null,这将导致synth.allocate()的空指针异常。
在调用Central.createSynthesizer()之前,您可能需要调用Central.availableSynthesizers()来查找系统上安装的合成器。
另外,作为一个快速测试,您可以尝试Locale.US而不是Locale.ENGLISH,看看它是否有效......这只是猜测。
我看到FreeTTS(http://freetts.sourceforge.net/docs/index.php)被描述为Java Speech接口的实现。安装可能会有所帮助。