2012-04-25 7 views
1

ハードドライブからサウンドファイルを再生するテストプログラムを作成しようとしていますが、引き続きNullPointerExceptionを取得しています。ここでのコードは、私が主にdream in codeからリッピングされ、これまでのところです:Javaプログラムで音楽を再生しようとしています

package ForSelf; 

import java.applet.*; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 

import javax.swing.*; 
import java.net.*; 

public class AudioTest extends JApplet{ 
JPanel playerPanel; 
JButton playSound, stopSound; 
public class Sound // Holds one audio file 
{ 
    private AudioClip song; // Sound player 
    private URL songPath; // Sound path 

    Sound(String filename){ 
    try 
    { 
     songPath = new URL(getCodeBase(),filename); // Get the Sound URL 
     song = Applet.newAudioClip(songPath); // Load the Sound 
    }catch(Exception e){ 
     e.printStackTrace(); 
     //e.getMessage(); 
    } // Satisfy the catch 
    } 

    public void playSound(){ 
    song.loop(); // Play 
    } 
    public void stopSound(){ 
    song.stop(); // Stop 
    } 
    public void playSoundOnce(){ 
    song.play(); // Play only once 
    } 
} 

public void init(){ 
    Sound testsong = new Sound("C:\\Users\\MyName\\Music\\PuzzleSolutionGet.wav"); 
    Container c = getContentPane(); 

    c.setBackground(Color.white); 
    c.setLayout(null); 

    playerPanel = new JPanel(); 
    playSound = new JButton("Play"); 
    stopSound = new JButton("Stop"); 

    playerPanel.add(playSound); 
    playerPanel.add(stopSound); 
    c.add(playerPanel); 

    testsong.playSound(); 
} 

public void paint(Graphics g){ 
    super.paint(g); 
    playerPanel.setLocation(0, 0); 
    playerPanel.setSize(300, 300); 
} 

public void actionPerformed(ActionEvent e){ 

} 
} 

JComponentのは、私はそれがちょうど私のファイルパスまたは何かはわからない と曲ファイルを再生して停止するように、後に実施されます、だから助けてくれれば幸いです。

更新されたコードは以下の通りです:

java.net.MalformedURLException: unknown protocol: c 
    at java.net.URL.<init>(URL.java:574) 
    at java.net.URL.<init>(URL.java:464) 
    at ForSelf.AudioTest$Sound.<init>(AudioTest.java:23) 
    at ForSelf.AudioTest.init(AudioTest.java:45) 
    at sun.applet.AppletPanel.run(AppletPanel.java:424) 
    at java.lang.Thread.run(Thread.java:662) 
java.lang.NullPointerException 
    at ForSelf.AudioTest$Sound.playSound(AudioTest.java:32) 
    at ForSelf.AudioTest.init(AudioTest.java:62) 
    at sun.applet.AppletPanel.run(AppletPanel.java:424) 
    at java.lang.Thread.run(Thread.java:662) 

これまで以上に有益な証明することがあります。

package ForSelf; 

import java.applet.*; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 

import javax.swing.*; 
import java.net.*; 

public class AudioTest extends JApplet{ 
JPanel playerPanel; 
JButton playSound, stopSound; 
public class Sound // Holds one audio file 
{ 
    private AudioClip song; // Sound player 
    private URL songPath; // Sound path 

    Sound(String filename){ 
    try 
    { 
     songPath = new URL(getCodeBase(),filename); // Get the Sound URL 
     song = Applet.newAudioClip(songPath); // Load the Sound 
    }catch(Exception e){ 
     e.printStackTrace(); 
     //e.getMessage(); 
    } // Satisfy the catch 
    } 

    public void playSound(){ 
    song.loop(); // Play 
    } 
    public void stopSound(){ 
    song.stop(); // Stop 
    } 
    public void playSoundOnce(){ 
    song.play(); // Play only once 
    } 
} 

public void init(){ 
    **String directory = System.getProperty("user.dir") + System.getProperty("file.separator"); 
    String puzzleSolutionGet = directory + "PuzzleSolutionGet"; 
    Sound testsong = new Sound(puzzleSolutionGet);** 

    //Sound testsong = new Sound("C:/Users/MyName/Music/PuzzleSolutionGet.wav"); 

    Container c = getContentPane(); 

    c.setBackground(Color.white); 
    c.setLayout(null); 

    playerPanel = new JPanel(); 
    playSound = new JButton("Play"); 
    stopSound = new JButton("Stop"); 

    playerPanel.add(playSound); 
    playerPanel.add(stopSound); 
    c.add(playerPanel); 

    testsong.playSound(); 
} 

public void paint(Graphics g){ 
    super.paint(g); 
    playerPanel.setLocation(0, 0); 
    playerPanel.setSize(300, 300); 
} 

public void actionPerformed(ActionEvent e){ 

} 
} 

私はそれを実行したとき、私はしかしには、以下の例外を得ました。私は高速アクセスのためにファイルを私のデスクトップに移しましたが、私はその場所が問題ではないと確信しています。

+0

それは歌の変数はnullを作るsongPathことがありますデバッガを使用していない場合は、ここでは基本を説明するIBMによってクールなリンクがあります。エラートレースを投稿できますか? – Cemre

+0

スタックトレース、または少なくとも例外がスローされた行番号を –

+0

に含める必要があります。1) 'Applet.newAudioClip(songPath);' 1.2でJAppletが導入されたため、[Java Sound] (http://stackoverflow.com/tags/javasound/info)ベースの['Clip'](http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/Clip.html) 1.3で導入されたので、サウンドを必要とする最新のアプレットで2つを組み合わせることは理にかなっています。2) 'paint(Graphics g)'オーバーライドは、アプレットのサイジング/レイアウトを使ってHTML/'init()'で行うべきではないことを何もしません。それを除く。 –

答えて

0
Sound testsong = new Sound("C:\\Users\\MyName\\Music\\PuzzleSolutionGet.wav"); 
... 
Sound(String filename){ 
    try 
    { 
     songPath = new URL(getCodeBase(),filename); // Get the Sound URL 

パスはcodebaseに関連する必要がある、と/をスラッシュ使用します。例えば。 codebaseポイント場合:

"C:\\Users\\MyName\\lib" 

コンストラクタは、より多くのようになります。

Sound testsong = new Sound("../Music/PuzzleSolutionGet.wav"); 
1

あなたは、前方にはバックスラッシュの代わりにスラッシュを使用する必要があります。 Linuxのパス名( "/home/username/song.wav")を使用して自分のコードを実行し、例外をスローしませんでした。

私はあなたが使用する必要がほとんど確信しています:

Sound testsong = new Sound("C:/Users/MyName/Music/PuzzleSolutionGet.wav"); 

は窓がディレクトリseperatorsとしてスラッシュとバックスラッシュの両方を受け入れることを覚えておいてください。

しかしこれがうまくいかない場合は、System.getProperty( "user.dir")メソッドとSystem.getProperty( "file.separator")メソッドを使用して現在のディレクトリの文字列を作成してからあなたは、単に最後に、あなたのファイル名を連結する必要があります。

String directory = System.getProperty("user.dir") + System.getProperty("file.separator"); 
String puzzleSolutionGet = directory + "PuzzleSolutionGet"; 
Sound testsong = new Sound(puzzleSolutionGet); 

この方法では、あなたのコードは、任意のOS上で実行されます。

例外がスローされたと思われる行をトグルして、コードをデバッグしようとすると、例外がスローされるまで1行ごとにステッピングすることに多くの時間を節約できます。

http://www.ibm.com/developerworks/library/os-ecbug/

+0

変更を加えて実行したときに、NullPointer例外とMalformedURL例外が発生しました。更新されたコードは、ページの上部にあります。 – Rxanadu

+0

*「ほとんどあなたが使用する必要があります: Sound testsong = new Sound( "C:/ Users/MyNam..'" *あなたはほとんど混乱しています。ファイルパスはアプレットでは機能しません。 –

関連する問題