プロが教える店舗&オフィスのセキュリティ対策術

java初心者です、宜しくお願いします。

あるボタンをクリックして、そのボタンから文字を取得、ある配列に入れた
サウンドファイルのファイルネームを取得して、音をならしたいと考えています。

しかし、配列に入れたサウンドファイルのファイルネームを取得しようとすると
"オーディファイルをコンポネントにキャストできません"みたいなエラーが出ます。

どのようにしてファイル名を取得してやればいいのでしょうか。
宜しくお願いします。
================================================
public class MySoundPlayer
{
static AudioClip[] sdStrage = new AudioClip[45] ;
String sds ;

public MySoundPlayer( String sds )
{
this.sds = sds ;

for( int i = 0 ; i <= 44 ; i ++ )
{
String fName = sdStrage[i].getName() ;
if( sds == fName )
{
sdStrage[i] .play() ;
}
else
{
// System.out.println("Error") ;
}
}
}
}
===================================================
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
sun.applet.AppletAudioClip cannot be cast to java.awt.Component

at MySoundPlayer.<init>(MySoundPlayer.java:18)
at Aiueo.actionPerformed(Aiueo.java:678)
====================================================

A 回答 (3件)

for( int i = 0 ; i <= 44 ; i ++ )の部分は


for( int i = 0 ; i <= sdStrage.length ; i ++ )
にすれば配列の要素の数が変わってもこのfor文の部分は変更をかけなくてよい形になります。(配列変数名.lengthで配列の要素の数を取得できるため)。
あと、文字列は"=="で比較してはなりません。”==”は等値(アドレスが同じか)を判定します。
等価(アドレスが違ってもよいのでオブジェクトが同じか)を判定するのは"equals()"で比較する必要があります(String型の比較も同じです)。
なので「java.lang.Objectクラス」のequalsメソッドをオーバーライドして、「何をもって同じものか」を比較する処理を記述したあと、if(sds.equals(fName))に変更したほうが良いと思われます。
    • good
    • 0

「AudioClip からファイル名をとってくる」という戦略がおかしいのかもしれん.



ファイル名を別途覚えとけばいいだけだし.
    • good
    • 0

どの行でエラーとなっているのですか?

    • good
    • 0
この回答へのお礼

Tacosanさん回答ありがとうございます。

# ・・・・・・・= sdStrage[i].getName() ;
の個所です。

宜しくお願いします。

お礼日時:2016/04/09 00:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!