Hallo Leute,
folgendes Problem das ich einen Thread habe der einen Musikplayer mit jLayer startet er läuft auch los und läuft auch die Playlist durch. Aber wenn ich die Stop methode Ausrufe passiert nichts ???:L???:L wieso auch immer wäre cool wenn man mir erklären könnte wie ich von der Main auf die Stop Funktion so zugreifen kann damit ich die Play Funktion abbrechen kann.
Main:
Player:
folgendes Problem das ich einen Thread habe der einen Musikplayer mit jLayer startet er läuft auch los und läuft auch die Playlist durch. Aber wenn ich die Stop methode Ausrufe passiert nichts ???:L???:L wieso auch immer wäre cool wenn man mir erklären könnte wie ich von der Main auf die Stop Funktion so zugreifen kann damit ich die Play Funktion abbrechen kann.
Main:
Java:
package player;
import java.awt.EventQueue;
public class Main {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main window = new Main();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Main() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
final MusicPlayer player = new MusicPlayer();
player.addSongToPlayList("C:/Users/Daniel/Music/P!nk - Funhouse.mp3");
player.addSongToPlayList("C:/Users/Daniel/Music/Pirates of The Caribbean - Soundtrack.mp3");
player.addSongToPlayList("C:/Users/Daniel/Music/Tetris Soundtrack - 8-Bit theme.mp3");
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JButton btnPlay = new JButton("Play");
btnPlay.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0) {
player.startPlayer();
}
});
btnPlay.setBounds(10, 11, 89, 23);
frame.getContentPane().add(btnPlay);
JButton btnStop = new JButton("Stop");
btnStop.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
player.stop();
}
});
btnStop.setBounds(10, 45, 89, 23);
frame.getContentPane().add(btnStop);
}
}
Player:
Java:
package player;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Vector;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class MusicPlayer{
private final Object lock = new Object();
private final static int NEVERSTARTED = 0;
private final static int NOTSTARTED = 1;
private final static int PLAYING = 2;
private final static int PAUSED = 3;
private final static int FINISHED = 4;
private int status = NEVERSTARTED;
private Thread playerThread;
private int currentID = 0;
private Player player;
private Vector<String> playList = new Vector<String>();
public void addSongToPlayList(String fileUrl){
playList.addElement(fileUrl);
}
public Vector<String> getPlayList(){
return playList;
}
public void setFile(String fileURL){
FileInputStream fis;
try {
fis = new FileInputStream(fileURL);
player = new Player(fis);
} catch (FileNotFoundException | JavaLayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void play(){
synchronized(lock){
while(status == PLAYING){
for(int i = 0; i < playList.size(); i++){
String fileURL = (String) playList.elementAt(currentID);
setFile(fileURL);
try {
player.play();
} catch (JavaLayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(currentID);
currentID++;
}
}
}
}
public void stop(){
synchronized(lock){
status = FINISHED;
lock.notifyAll();
}
}
public void startPlayer(){
synchronized(lock){
switch(status){
case NEVERSTARTED:
Runnable playerRunnable = new Runnable() {
public void run() {
play();
}
};
playerThread = new Thread(playerRunnable);
playerThread.setName("Player");
playerThread.setDaemon(true);
playerThread.setPriority(Thread.MAX_PRIORITY);
status = PLAYING;
playerThread.start();
break;
}
}
}
}