键盘Q,W,E,R 实现手动切歌,大键盘数字键0实现音乐停止播放,歌曲资源需手动添加到项目路径中
MusicThread.java
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/***
* 音乐播放器类
*
* @author lenovo
*/
// 继承自线程类Thread
public class MusicThread extends Thread {
private Player player=null;
private static int flag=0;
private String musicPath=null;
private boolean loop=false;
public MusicThread(String musicPath) {
this.musicPath = musicPath;
}
public MusicThread(String musicpath,boolean loop) {
this(musicpath);
this.loop = loop;
}
public static void setFlag(int pFlag) {
flag=pFlag;
}
public static int getFlag() {
return flag;
}
@Override
public void run() {
super.run();
try {
if(loop) {
while(true) {
play();
}
}else {
play();
}
} catch (FileNotFoundException | JavaLayerException e) {
e.printStackTrace();
}
}
/**
* 播放方法
* @throws FileNotFoundException
* @throws JavaLayerException
*/
private void play() throws FileNotFoundException, JavaLayerException {
BufferedInputStream buffer = new BufferedInputStream(MusicUtil.class.getClassLoader().getResourceAsStream(musicPath));
player = new Player(buffer);
player.play();
}
}
MusicWin.java
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
class MusicWin extends JFrame {
JTextArea jtextArea;
MusicThread musicThread=null;
public MusicWin() {
JFrame frame = new JFrame("切换音乐");
JPanel panel = new JPanel();
jtextArea = new JTextArea();
panel.add(jtextArea);
panel.setBounds(200, 200, 200, 200);
jtextArea.addKeyListener(new MusicListener());
jtextArea.append("要切换音乐:\n");
jtextArea.requestFocus();
frame.add(jtextArea);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static String[] musicPaths= {
//音乐路径
"com/neuedu/maplestory/sounds/bgm1.mp3",
"com/neuedu/maplestory/sounds/bgm2.mp3",
"com/neuedu/maplestory/sounds/bgm3.mp3",
"com/neuedu/maplestory/sounds/bgm4.mp3"
};
public static enum MusicName{
bgm1,
bgm2,
bgm3,
bgm4
};
public void switchMusic(int chioce) {
if (musicThread!=null) {
musicThread.stop();;
}
musicThread=new MusicThread(musicPaths[chioce],true);
musicThread.start();
}
public static void stopMusic() {
musicThread.stop();
}
class MusicListener implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
jtextArea.append("按下:"+e.getKeyChar() + "\n");
jtextArea.requestFocus();
switch (e.getKeyCode()) {
case KeyEvent.VK_Q:
switchMusic(0);
break;
case KeyEvent.VK_W:
switchMusic(1);
break;
case KeyEvent.VK_E:
switchMusic(2);
break;
case KeyEvent.VK_R:
switchMusic(3);
break;
case KeyEvent.VK_0:
stopMusic();
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
}
public static void main(String[] args) {
MusicWin win = new MusicWin();
}
}