首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时错误- JSAPI HelloWorld程序

运行时错误- JSAPI HelloWorld程序
EN

Stack Overflow用户
提问于 2012-02-05 05:10:05
回答 3查看 2.5K关注 0票数 0

当使用JSAPI运行基本HelloWorld程序时,它显示错误"java.lang.NullPointerException at HelloWorld.main(HelloWorld.java:11)“

代码如下:

代码语言:javascript
复制
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();
    }
}
}

编辑:我编辑我的程序:

代码语言:javascript
复制
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();
    }
}
}

它给出了输出:

代码语言:javascript
复制
javax.speech.synthesis.SynthesizerModeDesc@9304b1
null
java.lang.NullPointerException
    at HelloWorld.main(HelloWorld.java:15)

看起来SynthesizerModeDesc运行得很好,但它没有检测到任何引擎,因为我也尝试将null传递给函数Central.createSynthesizer (即获取默认引擎),但它仍然返回null。我检查了它正在检测的引擎数量,但显示为0。

请帮帮我!!:(

EN

回答 3

Stack Overflow用户

发布于 2012-02-05 05:14:35

Central.createSynthesizerjavadocs

返回:匹配所需属性的合成器,如果没有可用的属性,则返回null

显然,没有可用的。也许尝试Locale.US可能会产生一个有效的SynthesizerModeDesc

编辑回复评论:说真的,我从来没有用过这个东西...但我实际上是在阅读javadoc,因为我们一直在阅读。您正在使用的构造函数(new SynthesizerModeDesc(Locale.ENGLISH))表示,

“为语言环境构造一个EngineModeDesc。引擎名称、模式名称和运行都设置为null”。

从“然后我想使用它”的角度来看,这听起来并不好。还有另一个构造器,允许您设置这些选项,以及设置它们的方法。

票数 2
EN

Stack Overflow用户

发布于 2012-02-06 02:53:30

似乎是一个讨论过的解决方案here

代码语言:javascript
复制
Synthesizer synth = Central.createSynthesizer(
new SynthesizerModeDesc(
null, // engine name
"general", // mode name
Locale.US, // locale
null, // running
null) // voice
);

你确定你已经这样做了吗?“顺便说一句,我假设你使用的是freetts,并且已经将"speech.properties”文件复制到了你的jdk目录中。“

票数 1
EN

Stack Overflow用户

发布于 2013-09-11 06:05:35

您必须确保在构建路径中包含'jsapi.jar‘、'freetts.jar’和'jreetts-jsapi10.jar‘。如果您的freetts目录中没有这些文件,则必须进入lib子目录并启动jsapi.exe。还要确保已将'speech.properties‘复制到C:Users/"yourUserNameHere“目录中。希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9144565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档