0

При выполнении основной программы HelloWorld с помощью JSAPI, он показывает ошибку "java.lang.NullPointerException на HelloWorld.main (HelloWorld.java:11)"Runtime Error - JSAPI HelloWorld Программа

Далее следует код:

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(); 
    } 
} 
} 

Edit: я редактировать свою программу:

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(); 
    } 
} 
} 

и дает выход:

[email protected] 
null 
java.lang.NullPointerException 
    at HelloWorld.main(HelloWorld.java:15) 

Кажется, что SynthesizerModeDesc работает нормально, но он не обнаруживает никакого движка, поскольку я пробовал передавать значение null также функции Central.createSynthesizer (я получаю механизм по умолчанию), но все равно возвращает null. Я проверил количество обнаруженных двигателей, но он показывает 0.

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

+0

Это полный стек? –

+0

Да, это полный стек. –

ответ

2

Из javadocs для Central.createSynthesizer:

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

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

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

«Построить EngineModeDesc для языка. Название двигателя, название режима и запуск устанавливаются на нуль».

Это не очень хорошо от перспективы «И тогда я хочу использовать его». Существует еще один конструктор, который позволяет вам устанавливать эти параметры и методы для их установки.

+0

Java-документы обычно являются хорошим другом :) –

+0

Я всегда обожаю меня некоторыми Javadocs :-D –

+0

Извините, он показывает ту же ошибку после написания «Locale.US» или «Locale.getDefault()» –

1

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

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

Вы уверены, что вы сделали это «Кстати, я предполагаю, что вы используете FreeTTS и скопировали„файл speech.properties“в свой каталог jdk "?

+0

Ваш ответ будет лучше, если вы объясните решение и ссылку на источник. – Navarr

+0

Верно, что! Я нахожусь на своем iPhone, поэтому набираю длинные объяснения, вроде сосать. –

+0

Снова та же ошибка. Во-первых, я не использовал freetts или sphinx, но не пробовал и на sphinx, но все же он показывает ту же ошибку. –

0

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