0
import javax.speech.*;
import java.util.*;// creates a default Systhesize
import javax.speech.synthesis.*; //code for text-speech engine

public class SpeechUtils
{
    String speaktext;
    public void dospeak(String speak,String voicename)
    {
        speaktext=speak;
        String voiceName =voicename;
        try
        {
            SynthesizerModeDesc desc = new
            SynthesizerModeDesc(null,"general",Locale.US,null,null);
            Synthesizer synthesizer = Central.createSynthesizer(desc);
            synthesizer.allocate();
            synthesizer.resume();
            desc = (SynthesizerModeDesc) 
            synthesizer.getEngineModeDesc();
            Voice[] voices = desc.getVoices();
            Voice voice = null;
            for (int i = 0; i < voices.length; i++)
            {
                if (voices[i].getName().equals(voiceName))
                {
                    voice = voices[i];
                    break;
                }
            }
            synthesizer.getSynthesizerProperties().setVoice(voice);
            synthesizer.speakPlainText(speaktext, null);     

            synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
            synthesizer.deallocate();
        }catch (Exception e)
        {
             String message = " missing speech.properties in " + System.getProperty("user.home") + "\n"; 
            System.out.println(""+e);
            System.out.println(message);}
        }

        public static void main(String[] args)
        {
            SpeechUtils obj=new SpeechUtils();
            obj.dospeak(args[0],"life is beautiful");//getting an exception here....
        }

    }

如何解决此异常?我收到一个错误,例如

"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at SpeechUtils.main(SpeechUtils.java:44)". 

它是一个 Java 程序或文本到语音的转换。我导入了所有必要的库。但无法单独修复此异常

4

3 回答 3

2

您需要在运行程序时提供运行时参数。在您的代码中,您访问第一个参数:

obj.dospeak(args[0],"life is beautiful");//getting an exception here....

如果您不提供参数,则args数组的索引 0 处将没有元素,因此使用args[0]将 throw访问它ArrayIndexOutOfBoundsException。您需要像这样运行代码:

java SpeechUtils argument 

用您要输入程序的实际值替换参数

于 2013-11-07T03:56:27.573 回答
1

当您从命令行调用程序时,您需要传递一些参数

java SpeechUtils "I am doing well"

请记住

java.lang.ArrayIndexOutOfBoundsException:10

表示您尝试访问的 Array 在 Array[10] 处没有分配给它的任何元素,即缺少第 11 个元素。在这里,您在 0 处遇到异常,这意味着第 0 个元素不存在

于 2013-11-07T04:04:47.980 回答
0

程序执行时缺少参数。

"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

args[0]由于您在代码中使用了需要提供的参数丢失导致的错误obj.dospeak(args[0],"life is beautiful");所以在运行时传递参数。args[0]用它的第一个元素表示数组,因此运行程序只需要一个参数。

使用命令java SpeechUtils YourArgumentYouWantToAdd

于 2013-11-07T04:14:14.057 回答