Mp3 Player mit Singleton

Status
Nicht offen für weitere Antworten.

Monkey_D_Ace

Mitglied
Hallo Leute,

ich möchte meinen Mp3 Player (javazoom.jl.player) mit einem Singleton ausstatten damit immer nur einer existiert. Dies hab ich vor weil ich es nicht auf die Reihe krieg nach dem Beenden meiner Spielmusik ein Flag zu setzen, damit nur ein Introsound gespielt. Heißt: irgendwann hab ich 10 mal den gleichen Sound laufen und da jeder in nem eigenem Thread läuft, gibts da irgendwann Schwierigkeiten und die gnaze Sache kachelt ab.

Da mir also das so nicht gelingt mach ich es anders und will die Erzeugung weiter Mp3 Player verhindern indem nur die Erzeugung eines einzigen zulasse.

Jetz hab ich nur das Problem, dass ich ne Variable aus meiner Hauptklasse brauche und der Konstruktor von Singleton Klassen leider private ist. mit welcher Methode bekomme ich die Referenz auf die Klasse die das Objekt erzeugt?

schon mal danke im voraus

Gruß Ace
 
K

Körby

Gast
Hi

Das hab ich auf die schnelle mit google gefunden:

Code:
public class Singleton {
 
  // Eine (versteckte) Klassenvariable vom Typ der eigenen Klasse
  private static Singleton instance;
  // Verhindere die Erzeugung des Objektes über andere Methoden
  private Singleton () {}
  // Eine Zugriffsmethode auf Klassenebene, welches dir '''einmal''' ein konkretes 
  // Objekt erzeugt und dieses zurückliefert.
  public static Singleton getInstance () {
    if (Singleton.instance == null) {
      Singleton.instance = new Singleton ();
    }
    return Singleton.instance;
  }
}

Mit getInstance() kann man ein neues Objekt erzeugen, aber nur wenn noch keins existiert.
 

Monkey_D_Ace

Mitglied
danke für die Antwort Körby. ABER:

hatte die Mp3 Klasse schon soweit umgeschrieben aber das Problem ist dass der beim Aufruf der getInstance komischerweirse immer noch neue Objekte dieser Klasse erstellt. :( das soll er ja nicht

hier mal der Code vlt. fällt ja jemandem ein Fehler auf:

Code:
import javazoom.jl.player.*;
import java.io.*;

public final class Mp3Player {

	private static Mp3Player instance;
	
	 private Player player;
	 private FileInputStream is;
	 
	 static String[] trackList = {"C:\\Dokumente und Einstellungen\\Hanson\\Eigene Dateien\\3.Semester\\Programmieren\\Workspace\\Earth Escape\\bin\\sound\\intro.mp3"
			 , "C:\\Dokumente und Einstellungen\\Hanson\\Eigene Dateien\\3.Semester\\Programmieren\\Workspace\\Earth Escape\\bin\\sound\\StarWars1.mp3"
			 , "C:\\Dokumente und Einstellungen\\Hanson\\Eigene Dateien\\3.Semester\\Programmieren\\Workspace\\Earth Escape\\bin\\sound\\StarWars2.mp3"};
	 
	 PlayerThread pl = new PlayerThread();
	 OutputThread out = new OutputThread();
	 
	 public static Mp3Player getInstance (int a) {
		
		 if (Mp3Player.instance != null){
			 
			 Mp3Player.instance.stopIt() ;
			 
			 Mp3Player.instance = new Mp3Player (trackList[a]);
		 }
		 else {
			 
			if (Mp3Player.instance != null){
				 
				 Mp3Player.instance.stopIt();
			}
			 
			 Mp3Player.instance = new Mp3Player (trackList[a]);
		 }
		 return Mp3Player.instance;
	 }
	 
	 public Mp3Player( String filename ) 
	 {
		 if(true){}
		 try {
			
			 is = new FileInputStream( filename );
			 play();
		 }
		 catch( Exception e ){
			
			 e.printStackTrace();
		 }
	 }
	 
	 private void play()
	 {
		 try {
			 
			 player = new Player( is );
		 }
		 catch( Exception e ) {
			 
			 e.printStackTrace();
		 }
	  
		 pl.start();
		 out.start();
	 }
	 
	 public void stopIt(){
		 
		 try{
			 
			 player.close();
		 }
		 catch(Exception e){
			 
			 e.printStackTrace();
		 }
	 }
	 
	 class PlayerThread extends Thread
	 {
		 public void run() {
			 
			 try {
				 
				 player.play();
			 }
			 catch( Exception e ) {
				 
				 e.printStackTrace();
			 }
		 }
	 }
	 
	 class OutputThread extends Thread
	 {
		 public void run() {
			 
			 while( !player.isComplete() ) {
				 
				 System.out.println( player.getPosition() );
				 
				 try { Thread.sleep(1000); }
				 
				 catch( Exception e ){}
			 }
		 }
	 }
}

Hoffe jemand kann mir helfen
 
K

Körby

Gast
Also für mich sieht es fast so aus, als wenn Mp3Player.instance.stopIt() ;
nur den player beendet, aber die Instanz von MP3Player weiterexistiert. Du startest aber direkt dannach einen neuen MP3Player, also gibt es dann mehrere.

Du müsstest demnach in der Methode stopIt() auch die Instanz von MP3Player beenden.
 

Monkey_D_Ace

Mitglied
klingt einleuchtend; aber wie mach ich das?

mit player = null; hab ichs versucht aber dann kommt nat die NullPointerException

gibt es nen anderen Befehl mit dem ich ein Objekt löschen/wegmachen kann?
 
K

Körby

Gast
Erhalte doch einfach die alte Instanz und verzichte darauf eine neue anzulegen.
rufe wenn die Instanz schon vorhanden ist einfach eine neue Methode auf, in der du den FileInputStream is zuweist und die Methode play() aufrufst.
 

Monkey_D_Ace

Mitglied
jetz hab ich meinen Konstruktor noch auf private gesetzt und noch ne lücke in der Hauptklasse gestopft aber es kommt trotzdem noch vor dass zwei Instanze gleichzeitig existieren.

Ich such mal weiter und meld mich nochmal wenn ich was finde

für weitere Hinweise bin ich nat. dankbar

Gruß Ace
 
M

maki

Gast
else {

if (Mp3Player.instance != null){

Mp3Player.instance.stopIt();
}

Mp3Player.instance = new Mp3Player (trackList[a]);
}
Da ist das Problem, in diesem else zweig legst du einfach immer eine neue Instanz an.
Dazu kommt das dein Singleton nicht hreadsicher ist, wozu überhaupt lazy Initialisierung???
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
felix92 MP3-Player ProgressBar Java Basics - Anfänger-Themen 29
C Musikstream mit Player aus Javazoom Java Basics - Anfänger-Themen 2
D mp3/wav Player programmieren Java Basics - Anfänger-Themen 3
B CD player Java Basics - Anfänger-Themen 8
G Pause-Funktion in einem mp3-Player Java Basics - Anfänger-Themen 2
H Playlist für JMF Player Java Basics - Anfänger-Themen 7
G Media Player: Failed to realize: com.sun.media.PlaybackEngine Java Basics - Anfänger-Themen 4
M Mp3 Player programmieren! Java Basics - Anfänger-Themen 1
G mini mp3 player Java Basics - Anfänger-Themen 4
R Collision with Player Java Basics - Anfänger-Themen 11
J media.Player Java Basics - Anfänger-Themen 5
D Problem mit JMF-Player Java Basics - Anfänger-Themen 17
A frage zu mp3-player mit jmf Java Basics - Anfänger-Themen 18
L getDuration() von einem javax.media.player objekt problem. Java Basics - Anfänger-Themen 3
5 newBoxLayout undefined for Player? obwohl eingebunden. Java Basics - Anfänger-Themen 7
P Java Look & Feel - Windows Media Player 11 Java Basics - Anfänger-Themen 5
F Media Player integrieren Java Basics - Anfänger-Themen 4
E Threadproblem mit mp3 player Java Basics - Anfänger-Themen 4
L MP3-Player mit Java Java Basics - Anfänger-Themen 6
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
O Singleton Java Basics - Anfänger-Themen 5
R Methode in Singleton Klasse Java Basics - Anfänger-Themen 1
O Singleton Verständnis Java Basics - Anfänger-Themen 4
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
R OOP Singleton Java Basics - Anfänger-Themen 10
U Vererben von Singleton Java Basics - Anfänger-Themen 17
S Singleton - Daten einspielen Java Basics - Anfänger-Themen 5
K Warum ist ein Singleton kein Best Practise? Java Basics - Anfänger-Themen 3
M Singleton mit Parametern im Konstruktor Java Basics - Anfänger-Themen 18
D Singleton beim JFrame zerstören Java Basics - Anfänger-Themen 4
L Java Serialisierung Singleton Java Basics - Anfänger-Themen 6
A JBoss-Anwendung soll im Singleton-Mode laufen Java Basics - Anfänger-Themen 6
Luk10 Problem mit Singleton bzw statischer Referenz! Java Basics - Anfänger-Themen 16
S Instanz(en) einer Singleton-Klasse Java Basics - Anfänger-Themen 11
S Statische Klassen/ Singleton Java Basics - Anfänger-Themen 13
J Warum verwendet man Singleton? Java Basics - Anfänger-Themen 7
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
S Singleton lazy Java Basics - Anfänger-Themen 8
A ist das ein Singleton-Pattern? Java Basics - Anfänger-Themen 6
P Singleton-Implementation Java Basics - Anfänger-Themen 8
F singleton Java Basics - Anfänger-Themen 4
T Singleton Java Basics - Anfänger-Themen 13
Antoras Singleton oder Controller / Datenverwaltungsklasse? Java Basics - Anfänger-Themen 10
D Objekte anlegen und Singleton Pattern Java Basics - Anfänger-Themen 21
D Denkfehler Singleton Java Basics - Anfänger-Themen 53
X Singleton - In diesem Fall sinnvoll? Java Basics - Anfänger-Themen 22
S Fragen zu synchronized + Singleton! Java Basics - Anfänger-Themen 10
M Singleton Pattern Java Basics - Anfänger-Themen 35
J Singleton Pattern Java Basics - Anfänger-Themen 5
S Singleton Pattern passend hierfür? Java Basics - Anfänger-Themen 60
M GUI als SingleTon Java Basics - Anfänger-Themen 6
B Singleton und Resourcebundle Java Basics - Anfänger-Themen 7
G Singleton Pattern Java Basics - Anfänger-Themen 7
D Singleton in Java implementieren Java Basics - Anfänger-Themen 6
H singleton Synchronisations Problem? Java Basics - Anfänger-Themen 2
M Singleton verwenden, aber wie? Java Basics - Anfänger-Themen 3
H Singleton mit Attributen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben