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....

引数を指定しない場合、配列のインデックス 0 には要素がないため、argsを使用してアクセスするとargs[0]がスローされArrayIndexOutOfBoundsExceptionます。次のようにコードを実行する必要があります。

java SpeechUtils argument 

引数をプログラムに入力する実際の値に置き換えます

于 2013-11-07T03:56:27.573 に答える
1

コマンドラインからプログラムを呼び出すときは、いくつかの引数を渡す必要があります

java SpeechUtils "I am doing well"

思い出してください

java.lang.ArrayIndexOutOfBoundsException:10

アクセスしようとしている配列には、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]最初の要素で配列を表すため、プログラムを実行するために必要な引数は 1 つだけです。

コマンドを使用するjava SpeechUtils YourArgumentYouWantToAdd

于 2013-11-07T04:14:14.057 に答える