2013-08-31 107 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循環的外面,只要你不介意它不能夠阻止它的工作原理。