【问题标题】:Runtime Error - JSAPI HelloWorld Program运行时错误 - JSAPI HelloWorld 程序
【发布时间】:2012-02-04 21:10:05
【问题描述】:

使用 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。

请帮帮我!! :(

【问题讨论】:

  • 是的,它是完整的堆栈跟踪。

标签: java nullpointerexception runtime-error jsapi speechsynthesizer


【解决方案1】:

javadocsCentral.createSynthesizer

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

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

编辑以回应评论:说真的,我从来没有使用过这个东西......但我实际上是在阅读javadocs,因为我们在这里进行。您正在使用的构造函数 (new SynthesizerModeDesc(Locale.ENGLISH)) 说,

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

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

【讨论】:

  • 对不起,写入“Locale.US”或“Locale.getDefault()”后显示相同的错误
  • 查看最新编辑。说真的,javadocs 并不是很迟钝。
  • 我浏览了 javadoc,但问题仍然存在。查看最新编辑。
  • 我的问题是我不知道负责将 javax.speech.Central 添加到我的项目中的库。有人可以帮我吗?
【解决方案2】:

似乎是here讨论的解决方案

Synthesizer synth = Central.createSynthesizer(
new SynthesizerModeDesc(
null, // engine name
"general", // mode name
Locale.US, // locale
null, // running
null) // voice
);

你确定你已经完成了这个“顺便说一句,我假设你正在使用 freetts 并将“speech.properties”文件复制到你的 jdk 目录”?

【讨论】:

  • 如果您能解释解决方案并链接到源代码,您的答案会更好。
  • 没错!我在我的 iPhone 上,所以输入冗长的解释有点糟糕。
  • 又是同样的错误。起初,我没有使用 freetts 或 sphinx,但我也没有尝试过 sphinx,但它仍然显示相同的错误。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多