0

音を再生する簡単なアプリケーションを作ろうとしています。私のJavaプロジェクトにsound.wavという名前のサウンドファイルがあります(eclipse btwを使用)。サウンドファイルに移動する方法がわかりません。問題は、コードを介してサウンドファイルに移動する方法がわからないことです。私が実行しているものは、nullポインタ例外をスローします。そのファイルは存在しません。これまでの私のコードは次のとおりです。

    private static Sound sound;

public static void main(String[] args) {
    JFrame j = new JFrame("Sound");
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    j.setSize(300, 150);
    sound = new Sound("/Users/Chris/Desktop/Workspace/Sound/sound.wav");
            //this is the problem line
    JButton play = new JButton("Play");
    play.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            sound.play();               
        }

    });

    j.add(play,BorderLayout.SOUTH);
    j.setVisible(true);
}

これが私のサウンドクラスのコードです:

    private AudioClip clip;

public Sound(String fileName) {
    try {
        clip = Applet.newAudioClip(Sound.class.getResource(fileName));
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

public void play() {
    try {
        new Thread(){
            public void run() {
                clip.play();
            }
        }.start();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}
4

1 に答える 1

5

Class.getResource()は、javadoc が示すように、クラスパスからリソースを読み取ります。ファイルシステムからではありません。

ファイルから読み取り、ファイル IO (つまり a FileInputStream) を使用するか、クラスパスから読み取り、クラスパスClass.getResource()のルートから始まるリソース パスを使用して渡す必要があります。たとえば、sound.wav がランタイム クラスパスにある場合、パッケージcom.foo.bar.sounds内のコードは次のようになります。

Sound.class.getResource("/com/foo/bar/sounds/sound.wav")
于 2013-02-23T16:33:31.023 に答える