本文实例为大家分享了实现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 效果展示
功能缺陷:没有暂停功能
该程序还有待改进,后期将解决方案再分享给大家!!!
`