ハードドライブからサウンドファイルを再生するテストプログラムを作成しようとしていますが、引き続き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){
}
}
私はそれを実行したとき、私はしかしには、以下の例外を得ました。私は高速アクセスのためにファイルを私のデスクトップに移しましたが、私はその場所が問題ではないと確信しています。
それは歌の変数はnullを作るsongPathことがありますデバッガを使用していない場合は、ここでは基本を説明するIBMによってクールなリンクがあります。エラートレースを投稿できますか? – Cemre
スタックトレース、または少なくとも例外がスローされた行番号を –
に含める必要があります。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()'で行うべきではないことを何もしません。それを除く。 –