2013-08-31 80 views
-3

我正在尝试向我的程序添加背景音乐,但是当我指定音频文件的路径时,我收到错误消息。我怎么能指定这个(这将被发送给另一个人)。所以路径不能在我的系统上,它也必须位于JAR中。如何将背景音乐添加到我的程序中?

package main; 

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 

javax.sound.sampled.AudioSystem; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

import sun.audio.AudioPlayer; 
import sun.audio.AudioStream; 

public class Main extends JFrame { 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private JPanel contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Main frame = new Main(); 
       frame.setVisible(true); 
       PlaySound(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public static void PlaySound() { 
    InputStream in; 
    try { 
     in = new FileInputStream(new File("/audio/Happy_Happy_Birthday.wav")); 
     AudioStream audios = new AudioStream(in); 
     AudioPlayer.player.start(audios); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 

    } 

} 

public Main() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 717, 508); 
    contentPane = new JPanel() { 
     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 

     public void paintComponent(Graphics g) { 
      Image img = Toolkit.getDefaultToolkit().getImage(
        Main.class.getResource("/images/happy_birthday.jpg")); 
      g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); 
     } 
    }; 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 
} 
} 
+0

/audio/Happy_Happy_Birthday没有扩展名,你确定它是一个音频文件吗?它需要一个扩展。 – tom

+0

我的坏它是一个错误复制的代码,我有扩展名,仍然有错误 – user2585424

+1

虽然没有与音频子系统的经验,我会不愿意在与用户界面相同的线程播放音频。 – MadProgrammer

回答

1
  • 负载使用URL而非File剪辑。到部署时,这些资源可能会变成。既然如此,资源必须由URL而不是File访问。有关标签,请参阅info page,以形成URL
  • 使用javax.sound.sampled.Clip播放声音(与sun.audio包中的未记录类相反)。查看Java Sound info. page的工作来源。
0
InputStream in; 
    try { 
     in = new FileInputStream(new File("Jock_Jams_-_Are_You_Ready_For_This.wav")); 
     AudioStream audios = new AudioStream(in); 
     AudioPlayer.player.start(audios); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 

    } 

我用这个我while循环的外面,只要你不介意它不能够阻止它的工作原理。