Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich hab ein Problem vielleicht könnt ihr mir ja dabei helfen ....
sobald ich bei meinen javaprogramm ein Lied abspielen will, fängt es zwar an zu spielen das Programm friert dabei aber ein.
ich habe den Code zum Abspielen in eine eigene Klasse (Abspielen) gepackt und rufe die die Methode zum abspielen in der Doc-Schicht auf.
die Klasse Abspielen wird in der Main Klasse Deklariert.
ich habe auch schon versucht den gesamten Code zum Abspielen der Musik in die Main Klasse zu packen da hatte ich zwar nicht das problem das sich das Programm aufhängt, dafür ging das Lied sofort beim start des Programms an.
import doc.MusikDoc;
import view.MusikView;
public class Mainapp
{
public static void main(String[] args)
{
MusikDoc doc = new MusikDoc();
MusikView m = new MusikView("Musik", doc);
}
}
DOC-Schicht
[JAVA=54]
package doc;
import java.io.*;
import javax.sound.sampled.*;
public class MusikDoc
{
public MusikDoc()
{
super();
}
public void testPlay(String filename)
{
try {
File file = new File(filename);
AudioInputStream in= AudioSystem.getAudioInputStream(file);
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(),
16,
baseFormat.getChannels(),
baseFormat.getChannels() * 2,
baseFormat.getSampleRate(),
false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
// Play now.
rawplay(decodedFormat, din);
in.close();
}
catch (Exception e)
{
//Handle exception.
System.out.println(e);
}
}
private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException, LineUnavailableException
{
byte[] data = new byte[4096];
SourceDataLine line = getLine(targetFormat);
if (line != null)
{
// Start
line.start();
int nBytesRead = 0, nBytesWritten = 0;
while (nBytesRead != -1)
{
nBytesRead = din.read(data, 0, data.length);
if (nBytesRead != -1) nBytesWritten = line.write(data, 0, nBytesRead);
}
// Stop
line.drain();
line.stop();
line.close();
din.close();
}
}
private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException
{
SourceDataLine res = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
res = (SourceDataLine) AudioSystem.getLine(info);
res.open(audioFormat);
return res;
}
}
[/code]
View-Schicht
Java:
package view;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import doc.MusikDoc;
public class MusikView extends JFrame
{
private JButton btn_play;
private MusikDoc doc;
public MusikView(String title, MusikDoc doc)
{
super(title);
this.doc = doc;
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
erzeugeAnsicht();
}
private void erzeugeAnsicht()
{
this.setVisible(false);
this.removeAll();
ButtonListener bl = new ButtonListener();
btn_play = new JButton("play");
btn_play.addActionListener(bl);
this.add(btn_play, BorderLayout.CENTER);
this.setVisible(true);
}
class ButtonListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent ae)
{
if (ae.getSource() == btn_play)
{
doc.testPlay("1.mp3");
}
}
}
}