用Java实现综合利用Swing界面和自己写音乐播放类,音乐播放方面,不能调用其他第三方jar包,只能用JDK底层自带的API类,例如JavaSound。使用JavaSound API写代码
时间: 2024-03-21 15:41:58 浏览: 65
好的,以下是一个简单的Java音乐播放器实现,包括Swing界面和JavaSound API的使用。
首先,创建一个名为MusicPlayer的类,该类实现了ActionListener接口,用于处理Swing界面中的按钮单击事件。
```java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
public class MusicPlayer implements ActionListener {
private JFrame frame;
private JPanel panel;
private JButton openButton, playButton, stopButton;
private JSlider volumeSlider;
private File audioFile;
private AudioInputStream audioStream;
private SourceDataLine audioLine;
public MusicPlayer() {
// 创建Swing界面
frame = new JFrame("Music Player");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
openButton = new JButton("Open");
openButton.addActionListener(this);
panel.add(openButton);
playButton = new JButton("Play");
playButton.addActionListener(this);
panel.add(playButton);
stopButton = new JButton("Stop");
stopButton.addActionListener(this);
panel.add(stopButton);
volumeSlider = new JSlider();
panel.add(volumeSlider);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == openButton) {
// 当用户单击“Open”按钮时,打开文件选择对话框,选择要播放的音频文件
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
audioFile = fileChooser.getSelectedFile();
}
} else if (e.getSource() == playButton) {
// 当用户单击“Play”按钮时,开始播放音频文件
try {
audioStream = AudioSystem.getAudioInputStream(audioFile);
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioStream.getFormat());
audioLine = (SourceDataLine) AudioSystem.getLine(info);
audioLine.open(audioStream.getFormat());
audioLine.start();
// 创建一个线程,读取音频数据并写入SourceDataLine对象中
Thread playbackThread = new Thread(new Runnable() {
byte[] buffer = new byte[4096];
public void run() {
try {
while (true) {
int count = audioStream.read(buffer, 0, buffer.length);
if (count == -1) {
break;
}
audioLine.write(buffer, 0, count);
}
audioLine.drain();
audioLine.stop();
} catch (IOException e) {
e.printStackTrace();
}
}
});
playbackThread.start();
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
ex.printStackTrace();
}
} else if (e.getSource() == stopButton) {
// 当用户单击“Stop”按钮时,停止播放音频文件
audioLine.stop();
audioLine.close();
try {
audioStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
new MusicPlayer();
}
}
```
在上面的代码中,我们使用JavaSound API中的AudioSystem、AudioInputStream和SourceDataLine类来读取音频文件并将其写入音频设备中。同时,我们使用Swing包中的JButton和JSlider类来实现控制界面。
当用户单击“Open”按钮时,我们打开文件选择对话框,让用户选择要播放的音频文件。当用户单击“Play”按钮时,我们读取音频文件并将其写入音频设备中,同时创建一个线程来实现音频播放。当用户单击“Stop”按钮时,我们停止播放音频文件并关闭音频设备和音频流。
需要注意的是,上面的代码只是一个简单的示例,还有很多需要完善的地方。例如,我们可以添加更多的控制功能,如暂停、调整音量等。同时,我们也需要考虑错误处理和界面美观度等问题。
阅读全文