Hi,
ich habe einen Music Player gebaut, der wavs abspielt (nicht alle). Der JSlider ist momentan nur Deko.
Mein Problem ist, das in meinem Menü das Stopp-MenuItem nicht funktioniert, ich kann ein wav-file auswählen und über play abspielen, aber stopp will ums verrecken nicht funtionieren, ich hab schon so viel versucht, momentan geht das ganze für ne sekunde aus, mit Fehlermeldungen in Eclipse.
Angehängt habe ich zwei Klassen, die eine kümmert sich um die Menüs, die andere ums abspielen.
In der Zeile 140 so ist die if-Anweisung die den Thread abbrechen soll, ich würde mich sehr freuen wenn mich jemand mit ein wenig Code, Ideen unterstützen könnte.
ich habe einen Music Player gebaut, der wavs abspielt (nicht alle). Der JSlider ist momentan nur Deko.
Mein Problem ist, das in meinem Menü das Stopp-MenuItem nicht funktioniert, ich kann ein wav-file auswählen und über play abspielen, aber stopp will ums verrecken nicht funtionieren, ich hab schon so viel versucht, momentan geht das ganze für ne sekunde aus, mit Fehlermeldungen in Eclipse.
Angehängt habe ich zwei Klassen, die eine kümmert sich um die Menüs, die andere ums abspielen.
In der Zeile 140 so ist die if-Anweisung die den Thread abbrechen soll, ich würde mich sehr freuen wenn mich jemand mit ein wenig Code, Ideen unterstützen könnte.
Code:
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.applet.AudioClip;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.*;
import java.awt.*;
import java.io.File;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Player1 extends JFrame implements ActionListener {
private JPanel grafikPanel;
private JPanel unten;
private JMenuItem opennow;
private JMenuItem quit;
private JMenuItem play;
private JMenuItem stopthread;
private JFileChooser fileChooser;
private JSlider laut;
private JTextArea info;
private float gain;
private String neuezeile = "\n";
private Object source;
Player1() {
//Konstruktor der Klasse
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container content = getContentPane();
this.setTitle("JavaAmp");
JMenuBar menueLeiste = new JMenuBar();
JMenu menuDatei = new JMenu("File");
menuDatei.setMnemonic('F');
info = new JTextArea();
JScrollPane infolog = new JScrollPane(info);
grafikPanel = new JPanel();
add(infolog,BorderLayout.CENTER);
unten = new JPanel();
add(unten,BorderLayout.SOUTH);
laut = new JSlider(0,100,0);
JPanel unten1 = new JPanel();
unten1.setLayout(new GridLayout(3,1));
unten.add(unten1, BorderLayout.CENTER);
unten1.add(laut);
fileChooser = new JFileChooser();
//Hiermit werden nur noch wav files geladen
FileNameExtensionFilter filter = new FileNameExtensionFilter("Soundformate wav","wav");
fileChooser.setAcceptAllFileFilterUsed(false);
fileChooser.addChoosableFileFilter(filter);
// Einzelne Menu Items
opennow = new JMenuItem("Oeffnen",KeyEvent.VK_O );
quit = new JMenuItem ("Programm Beenden", KeyEvent.VK_P);
stopthread = new JMenuItem("Stop",KeyEvent.VK_S);
play = new JMenuItem("Play",KeyEvent.VK_Y);
opennow.addActionListener(new MenuAktion00());
quit.addActionListener(new MenuAktion01());
play.addActionListener(this);
stopthread.addActionListener(this);
menuDatei.add(opennow);
menuDatei.add(play);
menuDatei.add(stopthread);
menuDatei.add(quit);
// Menuleiste
menueLeiste.add(menuDatei);
this.setJMenuBar(menueLeiste);
}
private class MenuAktion00 implements ActionListener{
public void actionPerformed(ActionEvent e){
if (e.getSource() == opennow) {
int returnVal = fileChooser.showOpenDialog(Player1.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
info.append("Geoeffnet: " + file.getName() + "." + neuezeile);
} else {
info.append("Oeffnen abgebrochen." + neuezeile);
}
info.setCaretPosition(info.getDocument().getLength());
}
}
}
private class MenuAktion01 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource() == quit){
System.exit(0);
}
}
}
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
File soundFile = fileChooser.getSelectedFile();
if (source == play) {
PlayerThread sound = new PlayerThread(soundFile);
Thread go = new Thread(sound);
go.start();
}
if (source == stopthread) {
//HIER SOLL DER THREAD BEENDET WERDEN !
Thread go = new Thread((Runnable) soundFile);
go.stop();
// !!!
}
}
public static void main(String[] args) {
Player1 fenster = new Player1();
fenster.setSize(300, 200);
fenster.setVisible(true);
}
}
Code:
import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.SourceDataLine;
import javax.swing.JOptionPane;
public class PlayerThread implements Runnable{
private File file;
public PlayerThread(File file){
this.file = file;
}
public void run(){
play(this.file);
}
public void play(File file){
AudioInputStream audioInputStream;
byte[] buffer = new byte[4096];
try {
audioInputStream = AudioSystem.getAudioInputStream(file);
AudioFormat audioFormat = audioInputStream.getFormat();
SourceDataLine sourceDataLine = AudioSystem.getSourceDataLine(audioFormat);
sourceDataLine.open(audioFormat, buffer.length);
sourceDataLine.start();
while(true) {
int numBytes = audioInputStream.read(buffer);
if (numBytes <= 0)
break;
sourceDataLine.write(buffer, 0, numBytes);
}
sourceDataLine.drain();
sourceDataLine.stop();
} catch (Exception e) {
}
}
}