当我尝试运行此代码时,它会导致“线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:0”此异常

时间:2013-11-07 03:55:15

标签: java text-to-speech

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程序或文本到语音转换。我导入了所有必需的库。但是无法单独修复此异常

3 个答案:

答案 0 :(得分:2)

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

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

如果你没有提供参数,那么args数组的索引0就没有元素,因此使用args[0]访问它会抛出ArrayIndexOutOfBoundsException。您需要像这样运行代码:

java SpeechUtils argument 

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

答案 1 :(得分:1)

当您从命令行调用程序

时,需要传递一些参数
java SpeechUtils "I am doing well"
请记住

  

java.lang.ArrayIndexOutOfBoundsException:10

表示您尝试访问的数组没有在Array [10]为其分配任何元素 即第11个元素缺失。这里你得到异常0,这意味着第0个元素不存在

答案 2 :(得分:0)

缺少参数执行程序时。

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

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

使用命令java SpeechUtils YourArgumentYouWantToAdd