JAVA音乐播放小程序,不过不能播放音乐,请高手解答!!

importjava.awt.BorderLayout;importjava.awt.event.*;importjavax.swing.*;importjava.app... 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.mp3");
//变量 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 对象
}
}
展开
 我来答
爱银杏
2010-08-15 · TA获得超过672个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:539万
展开全部
java并不支持所有的音频格式(比如mp3格式), 支持的音乐格式主要有: au ,wav,midi,mid,aiff

所以你这个文件可以播放wav, 但不能播放mp3
suiyemin
2010-08-16
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
建议使用jmf(java media framwork),这样就能播放mp3等众多格式的音乐了;去java官网下一个jmf,安装好后,把jmf.jar包引入便可使用,给出实例代码:使用方法:构造函数中传入文件路径名即可,播放、暂停、继续、停止等功能均已实现。

/*************************************************
* Subclass: MusicPlay
*************************************************/
public class MusicPlay implements Runnable {
private Time zeroTime = new Time(0);
private Player player;
private boolean isloop = false;

/*************************************************
* Function: MusicPlay Description: constructor, load the music file and
* get ready for play Called By: MultiMedia()
*************************************************/
// 实例化各个参数 filename 为文件名,可为绝对路径
public MusicPlay(String filename) {
File file = new File(filename);
try {
player = Manager.createRealizedPlayer(file.toURI().toURL());
player.addControllerListener(new ControllListener());
} catch (NoPlayerException e) {
e.printStackTrace();
} catch (CannotRealizeException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/*************************************************
* Function: isRunning Description: test if this music is playing Called
* By:
*************************************************/
public boolean isRunning() {
return player.getState() == Player.Started;
}

/*************************************************
* Function: play Description: play the music for once Called By:
* resumeAll()
*************************************************/
// 只播放一次
public void play() {
if (!turnOff)
player.start();
}

/*************************************************
* Function: replay Description: replay the music Called By: musics that
* will be played many times will invoke this methed
*************************************************/
// 再播放一次
public void replay() {
if (turnOff)
return;

if (player.getState() == Controller.Prefetched)
player.setMediaTime(zeroTime);
player.start();
}

/*************************************************
* Function: stop Description: stop this music Called By: stopAll() of
* upper class,suspendAll() of upper
* class,BackroundForMenuPanel,GameOverPanel
*************************************************/
public void stop() {
player.stop();
}

/*************************************************
* Function: close Description: dispose the music Called By: closeAll()
* of super class
*************************************************/
public void close() {
player.stop();
player.close();
}

/*************************************************
* Function: loop Description: make the music played repetitiously
* Called By: music that will repetitious play
*************************************************/
// 循环播放
public void loop() {
if (turnOff)
return;

isloop = true;
player.prefetch();
replay();
}

/*************************************************
* Function: run Description: trig this music Called By: Override method
*************************************************/
@Override
public void run() {
loop();
}

/*************************************************
* Subclass: ControllListener Description: listener for playing and
* implement playing repetitiously
*************************************************/
// 通过对播放进度的监听,实现循环播放
private class ControllListener implements ControllerListener {

public void controllerUpdate(ControllerEvent e) {
if (e instanceof EndOfMediaEvent) {
if (isloop) {
player.setMediaTime(new Time(0));
player.start();
}
}
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式