java 窗口怎么加背景音乐?我已经写好窗口了

 我来答
Pike沐鑫
2011-05-10 · TA获得超过868个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:200万
展开全部
你好!很高兴为你解答。
首先,你打开这个登录窗口之后,你要求它能够播放音乐,你就在你启动的JFrame主线程main构造并显示完成JFrame后,新建一个方法叫做this.playBgMusic();

这里解释一下,为什么叫你在启动JFrame主线程中调用这个方法而不是在你的QQLoinFrame的构造方法中调用,原因是Swing的处理机制原理是利用EventQueue来执行的,可以说,如果你直接new的话都是单线程(main)处理程序,这样的话就会对这个线程依赖过大,而这个线程也负荷过大。当你想启动播放音乐或者IO读写之类的耗时线程时,你可以试试在构造方法中执行这方法,你将会发现你的Swing程序没反应,要等某线程处理完后才可以继续显示。这里main线程阻塞,所以你的程序表面看起来不动,组件没反应,这就是因为阻塞掉了。解决这个问题的办法就是如下(这是其中一种,另一种你可以自行查找):
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
QQLogin qq = new QQLogin();
this.playBgMusic();
}
});
}
*********************************************正文********************************************************
假设,你启动JFrame的主方法如下:
public static void main(String[] args) {
QQLogin qq = new QQLogin();
this.playBgMusic();
}

*******************************************this.playBgMusic()方法*********************************************
/**
*播放背景音乐,调用PlaySound线程类
/
public void playBgMusic() {
PlaySound play = new PlaySound();
Thread t = new Thread(play);
t.start();
}

*******************************************PlaySound线程类********************************************

/**
*PlaySound线程类,其中,因为你要求不使用JMF,所以,请选择.au或者.wav格式吧
/
public class PlaySound implements Runnable{

public void run() {
try {
AudioClip audio;
URL url = null;
File musicFile = new File("msg.wav");
URI uri = musicFile.toURI();
url = uri.toURL();
audio = Applet.newAudioClip(url);
audio.play();
} catch (MalformedURLException ex) {
Logger.getLogger(PlayMsgSound.class.getName()).log(Level.SEVERE, null, ex);
}
}

}
草莓爱香糖
2015-11-23 · TA获得超过772个赞
知道小有建树答主
回答量:765
采纳率:46%
帮助的人:228万
展开全部
其实就是写一条线程去播放指定的音频而已,至于java怎么播放音频,播放啥格式的音,这个你到网上搜一下,那个条播放的线程就提供些什么播放,暂停,停止的方法给主线程调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
编程笔记
推荐于2016-08-01 · 超过31用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:36万
展开全部
java只能播放wav格式音频文件,其它格式要下载解码器。

/**
*
* @param fileName wav格式音频文件
* @throws UnsupportedAudioFileException
* @throws IOException
* @throws LineUnavailableException
*/
public static void wavSoundPlayer(String fileName) throws UnsupportedAudioFileException, IOException, LineUnavailableException {
File f = new File(fileName);
if (!f.exists()) {
return;
}

// From file
AudioInputStream stream = AudioSystem.getAudioInputStream(f);
try {
// At present, ALAW and ULAW encodings must be converted
// to PCM_SIGNED before it can be played
AudioFormat format = stream.getFormat();
if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
16,
format.getChannels(),
format.getChannels() * 2,
format.getSampleRate(),
false); // big endian
stream = AudioSystem.getAudioInputStream(format, stream);
}

// Create the clip
DataLine.Info info = new DataLine.Info(SourceDataLine.class, stream.getFormat(), AudioSystem.NOT_SPECIFIED);
SourceDataLine m_line = (SourceDataLine) AudioSystem.getLine(info);
m_line.open(stream.getFormat(), m_line.getBufferSize());
m_line.start();

int numRead = 0;
byte[] buf = new byte[m_line.getBufferSize()];
while ((numRead = stream.read(buf, 0, buf.length)) >= 0) {
int offset = 0;
while (offset < numRead) {
offset += m_line.write(buf, offset, numRead - offset);
}
}
m_line.drain();
m_line.stop();
m_line.close();
} finally {
stream.close();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
usernamepassword
2015-12-11 · TA获得超过106个赞
知道答主
回答量:52
采纳率:0%
帮助的人:28.4万
展开全部
AudioClip audio=JApplet.newAudioClip(URL url);
audio.play();//播放音乐
方法是java提供的一种简单读取音频的一个api方法,
不过只支持ogg. au ,mid,等格式的简单音频,你可以试试看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
logic1965
2011-05-09 · TA获得超过551个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:211万
展开全部
下面是一个JAVA音乐播放小程序,可以参考下:
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
import java.net.*;

public class Yinyue implements ActionListener{
JMenuItem menuItem1,menuItem2,menuItem3,menuItem4; //4个菜单命令

AudioClip sound=loadSound("1.wav");//变量 sound 保存音频文件 1.wav

JTextArea output;
static JFrame frame;

public static void main(String args[]){
frame=new JFrame("播放音乐");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Yinyue yin=new Yinyue();
frame.setJMenuBar(yin.createMenuBar());
frame.setContentPane(yin.createContentPane());
frame.setSize(200,150);
frame.setVisible(true);
}
public JMenuBar createMenuBar(){
JMenuBar menuBar=new JMenuBar(); //创建 JMenuBar 对象
JMenu menu=new JMenu("音乐"); //创建 JMenu 对象(主菜单)
menuItem1=new JMenuItem("播放"); //创建菜单命令
menu.add(menuItem1); //将菜单命令添加到对应的主菜单中
menuItem2=new JMenuItem("循环");
menu.add(menuItem2);
menuItem3=new JMenuItem("停止");
menu.add(menuItem3);
menuItem4=new JMenuItem("退出");
menu.add(menuItem4);
menuBar.add(menu);
//将主菜单及其菜单命令添加到 JMenuBar 对象中
menuItem1.addActionListener(this);
menuItem2.addActionListener(this);
menuItem3.addActionListener(this);
menuItem4.addActionListener(this);
return menuBar; //返回 JMenuBar 对象
}
public JPanel createContentPane(){
JPanel contentPane=new JPanel(new BorderLayout());
output=new JTextArea(5,30);
output.setEditable(false);
contentPane.add(output,BorderLayout.CENTER);
return contentPane;
}
/*根据用户单击的菜单命令,执行相应的语句*/
public void actionPerformed(ActionEvent e){
if(e.getSource()==menuItem1){ //播放音频文件
sound.play();
output.setText("播放音频文件");
}
if(e.getSource()==menuItem2){ //循环播放音频文件
sound.loop();
output.setText("循环播放音频文件");
}
if(e.getSource()==menuItem3){ //停止播放音频文件
sound.stop();
output.setText("停止播放音频文件");
}
if(e.getSource()==menuItem4){
int n=JOptionPane.showConfirmDialog(frame, "是否关闭程序","播放音乐",
JOptionPane.OK_CANCEL_OPTION);
if(n==JOptionPane.OK_OPTION)System.exit(0);
//退出程序
}
}
/*导入音频文件*/
private AudioClip loadSound(String fileName){
URL url=null; //保存音频文件的完整路径
try{
url=new URL("file:"+System.getProperty("user.dir")+"/"+fileName);
}
catch(MalformedURLException e){}
return Applet.newAudioClip(url); //返回创建的 AudioClip 对象
}
}

ps:java支持的音乐格式主要有: au ,wav,midi,mid,aiff,不支持MP3。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式