当使用JSAPI运行基本HelloWorld程序时,它显示错误"java.lang.NullPointerException at HelloWorld.main(HelloWorld.java:11)“
代码如下:
import javax.speech.*;
import javax.speech.synthesis.*;
import java.util.Locale;
public class HelloWorld {
public static void main(String args[]) {
try {
// Create a synthesizer for English
Synthesizer synth = Central.createSynthesizer(new SynthesizerModeDesc(Locale.ENGLISH));
// Get it ready to speak
synth.allocate();
synth.resume();
// Speak the "Hello world" string
synth.speakPlainText("Hello, world!", null);
// Wait till speaking is done
synth.waitEngineState(Synthesizer.QUEUE_EMPTY);
// Clean up
synth.deallocate();
} catch (Exception e) {
e.printStackTrace();
}
}
}编辑:我编辑我的程序:
import javax.speech.*;
import javax.speech.synthesis.*;
import java.util.Locale;
public class HelloWorld {
public static void main(String args[]) {
try {
// Create a synthesizer for English
SynthesizerModeDesc modeDesc = new SynthesizerModeDesc(null,"general",Locale.US,null,null);
System.out.println(modeDesc);
Synthesizer synth = Central.createSynthesizer(modeDesc);
//Synthesizer synth = Central.createSynthesizer(null);
// Get it ready to speak
System.out.println(synth);
synth.allocate();
synth.resume();
// Speak the "Hello world" string
synth.speakPlainText("Hello, world!", null);
// Wait till speaking is done
synth.waitEngineState(Synthesizer.QUEUE_EMPTY);
// Clean up
synth.deallocate();
} catch (Exception e) {
e.printStackTrace();
}
}
}它给出了输出:
javax.speech.synthesis.SynthesizerModeDesc@9304b1
null
java.lang.NullPointerException
at HelloWorld.main(HelloWorld.java:15)看起来SynthesizerModeDesc运行得很好,但它没有检测到任何引擎,因为我也尝试将null传递给函数Central.createSynthesizer (即获取默认引擎),但它仍然返回null。我检查了它正在检测的引擎数量,但显示为0。
请帮帮我!!:(
发布于 2012-02-05 05:14:35
从Central.createSynthesizer的javadocs
返回:匹配所需属性的合成器,如果没有可用的属性,则返回null
显然,没有可用的。也许尝试Locale.US可能会产生一个有效的SynthesizerModeDesc
编辑回复评论:说真的,我从来没有用过这个东西...但我实际上是在阅读javadoc,因为我们一直在阅读。您正在使用的构造函数(new SynthesizerModeDesc(Locale.ENGLISH))表示,
“为语言环境构造一个EngineModeDesc。引擎名称、模式名称和运行都设置为null”。
从“然后我想使用它”的角度来看,这听起来并不好。还有另一个构造器,允许您设置这些选项,以及设置它们的方法。
发布于 2012-02-06 02:53:30
似乎是一个讨论过的解决方案here
Synthesizer synth = Central.createSynthesizer(
new SynthesizerModeDesc(
null, // engine name
"general", // mode name
Locale.US, // locale
null, // running
null) // voice
);你确定你已经这样做了吗?“顺便说一句,我假设你使用的是freetts,并且已经将"speech.properties”文件复制到了你的jdk目录中。“
发布于 2013-09-11 06:05:35
您必须确保在构建路径中包含'jsapi.jar‘、'freetts.jar’和'jreetts-jsapi10.jar‘。如果您的freetts目录中没有这些文件,则必须进入lib子目录并启动jsapi.exe。还要确保已将'speech.properties‘复制到C:Users/"yourUserNameHere“目录中。希望这能有所帮助
https://stackoverflow.com/questions/9144565
复制相似问题