Ошибка выполнения - JSAPI HelloWorld Program - PullRequest
0 голосов
/ 05 февраля 2012

При запуске основной программы HelloWorld с использованием JSAPI выдается сообщение об ошибке «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 работает нормально, но не обнаруживает ни одного движка, так как япопытался передать ноль также в функцию Central.createSynthesizer (т.е. получить механизм по умолчанию), но все равно он возвращает ноль.Я проверил количество двигателей, которые он обнаруживает, но показывает 0.

Пожалуйста, помогите мне !!(

Ответы [ 3 ]

2 голосов
/ 05 февраля 2012

Из javadocs для Central.createSynthesizer:

Возвращает: синтезатор, соответствующий требуемым свойствам, или ноль, если нет доступных

Видимонет ни одного доступногоВозможно, попытка Locale.US может привести к действительному действию SynthesizerModeDesc

Изменить в ответ на комментарий: Серьезно, я никогда не использовал эту вещь ... но я на самом деле читаю javadocsкак мы идем сюда.Используемый вами конструктор (new SynthesizerModeDesc(Locale.ENGLISH)) говорит:

"Создайте EngineModeDesc для локали. Для имени двигателя, имени режима и работы задано значение null".

Это не звучит хорошо с точки зрения "А потом я хочу это использовать".Есть еще один конструктор, который позволяет вам устанавливать эти параметры, а также методы для их установки.

1 голос
/ 05 февраля 2012

Кажется, что решение обсуждается здесь

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

Вы уверены, что сделали это "Кстати, я предполагаю, что вы используете халяву и скопировали" речьсвойства "файл в каталог jdk"?

0 голосов
/ 11 сентября 2013

вы должны убедиться, что вы включили jsapi.jar, freetts.jar и jreetts-jsapi10.jar в путь сборки.если у вас их нет в каталоге freetts, вы должны зайти в подкаталог lib и запустить jsapi.exe.а также убедитесь, что у вас есть файл «speech.properties», скопированный в ваш каталог C: Users / «yourUserNameHere».надеюсь, что это поможет

...