本文实例为大家分享了实现Java程序中播放mp3格式的音频代码,供大家参考,具体内容如下:
1 内容说明
(1)开发前,需引入一个
jlayer-1.0.1.jar包
提取码:2317
(2)构建路径
(3)本程序创建Player类的对象调用play()方法实现音频播放
(4)其他:利用了多线程知识以及GUI图形界面
2 实例代码展示
2.1 主类
public class Main { public static void main(String[] args) { new JWindowTest().start(); //开启线程 try { Thread.sleep(6000);//休眠6秒 new MYFrame(); } catch (InterruptedException e) { e.printStackTrace(); } } }
2.2 音乐播放窗口实例代码
class MusicFrame{ JButton button1 = null; JButton button2 = null; public void setMusicPanel() { JFrame jFrame = new JFrame(); jFrame.setTitle("音乐播放"); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取显示器的大小 int sw = screenSize.width; //显示器的宽度 int sh = screenSize.height; //显示器的高度 int width = 900; //窗口宽度 int height = 600; //窗口高度 jFrame.setBounds((sw - width) / 2, (sh - height) / 2, width, height); //设置窗口大小及定位 this.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("music.png")));// 图标 ImageIcon background = new ImageIcon( Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("techno04.gif"))); // 背景图片 JLabel label = new JLabel(background); // 把背景图片显示在一个标签里面 label.setBounds(0, 0, jFrame.getWidth(), jFrame.getHeight()); // 把标签的大小位置设置为图片刚好填充整个面板 JPanel imagePanel = (JPanel) jFrame.getContentPane(); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 imagePanel.setOpaque(false); // 窗口透明 jFrame.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE)); // 把背景图片添加到分层窗格的最底层作为背景 jFrame.setLayout(null); // 清空布局 JLabel jlabel = new JLabel("Hello!"); //文本标题 jlabel.setForeground(new Color(0x02FCFC)); //设置前景色 jlabel.setFont(new Font("黑体", Font.BOLD, 45)); //设置按钮中的字体属性 jlabel.setBounds((jFrame.getWidth() - 140) / 2, (jFrame.getHeight() - 590) / 2, 400, 60); //设置按钮位置,及按钮大小 jFrame.add(jlabel); this.button1 = new JButton("FileDialog选择器"); button1.setForeground(new Color(0xA4F6A4)); //设置前景色 button1.setFont(new Font("黑体", Font.BOLD, 18)); //设置按钮中的字体属性 button1.setDefaultCapable(true); button1.setContentAreaFilled(false); //设置按钮透明 button1.setBounds((jFrame.getWidth() - 250) / 2, (jFrame.getHeight() - 320) / 2, 250, 40); //设置按钮位置,及按钮大小 jFrame.add(button1); this.button2 = new JButton("关闭窗口"); button2.setFont(new Font("黑体", Font.BOLD, 18)); button2.setForeground(new Color(0xA4F6A4)); //设置前景色 button2.setDefaultCapable(true); button2.setContentAreaFilled(false); //设置按钮透明 button2.setBounds((jFrame.getWidth() - 250) / 2, (jFrame.getHeight() - 180) / 2, 250, 40); //设置按钮位置,及按钮大小 jFrame.add(button2); jFrame.setResizable(false); jFrame.setVisible(true); //按钮监听 this.button1.addActionListener(e -> { FileDialog fd = new FileDialog(jFrame, "Open", FileDialog.LOAD);// 文件打开路径 fd.setVisible(true); // 显示选择框 String music = fd.getDirectory() + fd.getFile(); //获取歌曲的绝对路径 try { MusicTest(music); } catch (Exception exception) { JOptionPane.showMessageDialog( //警告提示框 jFrame, "文件不能为空!", "警告", JOptionPane.WARNING_MESSAGE); } }); this.button2.addActionListener(e -> jFrame.dispose()); } /** * 音乐播放 */ public void MusicTest(String file) throws FileNotFoundException { BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(file));//创建缓冲输入流对象 new Thread( () -> { Player player; try { assert false; player=new Player(buffer);//创建Player的对象 player.play(); } catch (JavaLayerException e) { JOptionPane.showMessageDialog( //警告提示框 new JFrame(), "文件不能为空!", "警告", JOptionPane.WARNING_MESSAGE); } } ).start(); //开启线程 } }
2.3 选择器主窗口实例代码
class MYFrame extends JFrame { public MYFrame() { super("Music"); // 图标 this.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("music.png"))); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取系统显示界面大小 final int sw = screenSize.width; //系统显示界面的宽度 final int sh = screenSize.height; // 系统显示界面的高度 final int width = 1050; //音乐主面板的宽度 final int height = 700; //音乐主面板的高度 this.setBounds((sw - width) / 2, (sh - height) / 2, width, height); // 设置窗口大小及定位 ImageIcon background = new ImageIcon( Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("imge01.gif"))); // 背景图片 JLabel label = new JLabel(background); // 把背景图片显示在一个标签里面 label.setBounds(0, 0, this.getWidth(), this.getHeight()); // 把标签的大小位置设置为图片刚好填充整个面板 JPanel imagePanel = (JPanel) this.getContentPane(); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 imagePanel.setOpaque(false); // 窗口透明 this.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE)); // 把背景图片添加到分层窗格的最底层作为背景 setLayout(null); // 清空布局 JLabel jlabel = new JLabel("听音乐-新生活"); jlabel.setForeground(new Color(0x04F87A)); // 设置前景色 jlabel.setFont(new Font("华文琥珀", Font.BOLD, 45)); // 设置文本的字体属性 jlabel.setBounds((this.getWidth() - 300) / 2, (this.getHeight() - 690) / 2, 400, 60); // 设置按钮位置,及按钮大小 add(jlabel); JButton button01 = new JButton("本地音乐播放"); button01.setForeground(new Color(0x16CDFA)); // 设置前景色 button01.setFont(new Font("黑体", Font.BOLD, 15)); // 设置按钮中的字体属性 button01.setDefaultCapable(true); button01.setContentAreaFilled(false); // 设置按钮透明 button01.setBounds((this.getWidth() - 200) / 2, (this.getHeight() - 250) / 2, 200, 40); // 设置按钮位置,及按钮大小 add(button01); JButton button02 = new JButton("网易云音乐"); button02.setFont(new Font("黑体", Font.BOLD, 15)); button02.setForeground(new Color(0x04FAFA)); // 设置前景色 button02.setDefaultCapable(true); button02.setContentAreaFilled(false); // 设置按钮透明 button02.setBounds((this.getWidth() - 200) / 2, (this.getHeight() - 40) / 2, 200, 40); // 设置按钮位置,及按钮大小 add(button02); JButton button03 = new JButton("退出"); button03.setFont(new Font("黑体", Font.BOLD, 15)); button03.setForeground(new Color(0x04FAFA)); // 设置前景色 button03.setDefaultCapable(true); button03.setContentAreaFilled(false); // 设置按钮透明 button03.setBounds((this.getWidth() - 200) / 2, (this.getHeight() - 40 + 210) / 2, 200, 40); // 设置按钮位置,及按钮大小 add(button03); this.setResizable(false); setVisible(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//窗体关闭并退出系统 init(button01, button02, button03); } private void init(JButton button01, JButton button02, JButton button03) { // 选择器面板 button01.addActionListener(e -> new MusicFrame().setMusicPanel()); button02.addActionListener(e -> { // 跳转到网易云音乐页面 Desktop desktop = Desktop.getDesktop(); try { desktop.browse(new URI("https://music.163.com/")); //跳转网易云链接 } catch (IOException | URISyntaxException ioException) { JOptionPane.showMessageDialog( //警告提示框 new JFrame(), "异常", "警告", JOptionPane.WARNING_MESSAGE); } }); button03.addActionListener(e -> System.exit(0));//退出系统 } } ```
2.4 进度条设计实例代码
class JWindowTest extends Thread { private static final int MIN_PROGRESS = 0; private static final int MAX_PROGRESS = 10; private static int currentProgress = MIN_PROGRESS;//设置进度条的起始值 // 创建一个进度条 final JProgressBar progressBar = new JProgressBar(); JWindow jf = new JWindow(); public JWindowTest() { jf.setSize(480, 300); jf.setLocationRelativeTo(null); final JLabel label = new JLabel( new ImageIcon(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("music03.gif")))); label.setBounds(0, 0, 480, 300); // 设置进度的 最小值 和 最大值 progressBar.setMinimum(MIN_PROGRESS); progressBar.setMaximum(MAX_PROGRESS); progressBar.setBorderPainted(false);// 不显示下边框 // 前景色 progressBar.setForeground(new Color(4, 253, 19)); // 背景底色 progressBar.setBackground(new Color(0x01012F)); progressBar.setBounds(0, 292, 480, 8); // 设置当前进度值 progressBar.setValue(currentProgress); // 绘制百分比文本(进度条中间显示的百分数) // progressBar.setStringPainted(true); // 添加到内容面板 jf.add(progressBar); jf.add(label); jf.setVisible(true); // 设置布局为空 jf.setLayout(null); } public void run() { // 控制进度条的时间 new Timer(500, e -> { currentProgress++; progressBar.setValue(currentProgress); if (currentProgress > 10) { jf.dispose(); // JWindow窗口消失 } }).start(); } }
3 效果展示
功能缺陷:没有暂停功能
该程序还有待改进,后期将解决方案再分享给大家!!!
`