我想把我的java小程序中嵌入一个背景音乐,写出添加背景音乐代码。

在java小程序中添加背景音乐代码,要求写的详细一点代码,和注释,好的话会加分
放音乐的api网上查有很多,比族消如javax.sound.midi.*;
支持midi,mid背景音乐的播放
public class Music implements MetaEventListener, Runnable{
private Sequence sequence = null;
private Sequencer sequencer;
private boolean isPlaying = false;
private volatile Thread thread;

public Music(){

}
public Music(String midifile){
try {
loadMidi(midifile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//导入midi文件到内存中传给Sequence对象,相当与编码器
public void loadMidi(String filename) throws IOException, InvalidMidiDataException{

sequence = MidiSystem.getSequence(this.getClass().getResourceAsStream(filename));
}
//播放方法
public void play(){
if(isPlaying){
return;
}

try {
sequencer = MidiSystem.getSequencer();
sequencer.open();
//用Sequencer对象隐枣把声音文件序列解码出来播放

sequencer.setSequence(sequence);
sequencer.addMetaEventListener(this);
//设灶穗拆置循环次数,-1表示一直循环
sequencer.setLoopCount(-1);
sequencer.setLoopStartPoint(0);
sequencer.setLoopEndPoint(sequencer.getTickLength());
} catch (MidiUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(thread == null){
thread = new Thread(this);
thread.start();
}

}

public void stop(){
if(isPlaying){
sequencer.stop();
isPlaying = false;
}
if(thread != null){
thread = null;
}
}

public void meta(MetaMessage meta) {
if(meta.getType() == 47){
System.out.println("Sequencer is done playing");
}
// TODO Auto-generated method stub

}

public void run() {
// TODO Auto-generated method stub
Thread current = Thread.currentThread();
while(current == thread && !isPlaying){
sequencer.start();
isPlaying = true;
try {
thread.sleep(1001);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
//用起来也很方便
public static void main(String[] args){
Music music = new Music("a.mid");
music.play();
}
}

如果这样写路径类要和音频文件放在一个目录下,如果你不想这样,有两种方法,一种是修改路径字符串,另一种是把Class.getResourceAsStream方法改成new FileInputStream 这两个方法加载资源的初始路径不同,前者找class文件所在目录,后者找project目录
希望有帮助

public void setBack() {
((JPanel) mainFrame.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要宴雀跟当前这个类是同一个包下
URL url = StudentManager.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel background = new JLabel(img);
mainFrame.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}
放在main函数上边就可以了,给你修改一下算了:

package com.jpioneer.swing;

import java.awt.*;
import java.awt.event.*;
import java.net.URL;

import javax.swing.*;

public class StudentManager {

JFrame mainFrame; // 主框架、主窗口

public StudentManager() {
mainFrame = new JFrame("教育经历管理系统--植物人工作室出品");

// 创建菜单栏JMenuBar
JMenuBar menuBar = new JMenuBar();

// 创建菜单JMenu
JMenu menu = new JMenu("菜单选项");

// 创建菜单项目JMenuItem
JMenuItem input = new JMenuItem("录入对象信息");
input.addActionListener(new MenuHandler());

JMenuItem modify = new JMenuItem("修改对象信息");
modify.addActionListener(new MenuHandler());

JMenuItem inquest = new JMenuItem("查询对象信息");
inquest.addActionListener(new MenuHandler());

JMenuItem delete = new JMenuItem("删除对象信息");
delete.addActionListener(new MenuHandler());

// 把菜单项目JMenuItem添加到菜单JMenu当中
menu.add(input);
menu.add(modify);
menu.add(inquest);
menu.add(delete);

// 把菜单JMenu添加慎滑到菜单栏JMenuBar当中
menuBar.add(menu);

// 把菜单栏JMenuBar添加到框架上
mainFrame.setJMenuBar(menuBar);

// 创建标签
JLabel myLabel = new JLabel("教育经历管理系统"晌孝早);
myLabel.setForeground(Color.red);
myLabel.setSize(50, 5);

JPanel pan = new JPanel();
pan.add(myLabel);
// 把标签所在的容器设置为框架的内容面板
mainFrame.setContentPane(pan);

mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
// 关闭框架的处理
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//看到这个setBack了吗?在这调用就可以了!!!!!!
this.setBack();

}

class MenuHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("录入对象信息")) {
// new Input(); // 如果是录入信息,则产生录入窗口
}
if (e.getActionCommand().equals("查询对象信息")) {
// new Inquest(); // 如果是查询信息,则产生查询窗口
}
}
}

public void setBack() {
((JPanel) mainFrame.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要跟当前这个类是同一个包下
URL url = StudentManager.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel background = new JLabel(img);
mainFrame.getLayeredPane().add(background,
new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}

public static void main(String args[]) {
new StudentManager();
}
}
我想你只是想在自己的程序中加上点儿音乐吧,不必要那么复杂,多了你一时也看不明白,下面是加入音乐的小程序,你看明白了再薯岁改改,加在你想用的地方就好了,看不懂再问吧,调试的时候记得修改文件路径啊:
import java.io.File;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;

public class Mytest {
Player player = null;

public void LoadAndPlay() {
File mufile = new File("D:\\aa\\菠萝数棚睁菠萝蜜.mp3");
try {
if (player == null) {
if (mufile.exists()) {
MediaLocator locator = new MediaLocator("file:"
+ mufile.getAbsolutePath());
player = Manager.createRealizedPlayer(locator);
player.prefetch();
}
}
player.start();// 开始和者播放
} catch (Exception e) {
e.getStackTrace();
}
}
public static void main(String[] args){
Mytest mytest=new Mytest();
mytest.LoadAndPlay();
}

}
朋友给我了一个类乱兄,大尘唯小0.6K,用类名.play(音频文件名); 就行了,我一直在用。如:
public class Test{
public static void main(String[] args){
AuPlay.play("526.wav");
}
}
音频格式是.au或.wav,类和音频文件要在同一目录下。要的话留个哗兄袭邮箱,我发给你。呵呵