SWT mp3player - wie unterbricht man play

Status
Nicht offen für weitere Antworten.
Moin,

ich will mir einen kleinen mp3player basteln. Schön mit SWT GUI. Abspielen funktioniert auch (javazoom) , wenn ich auf den play button drücke, nur ich kann nix anderes mehr machen. Die ganze GUI hängt, weil er ja mit dem Abspielen des mp3 beschäftigt ist. Ich würde jetzt aber gerne über die GUI stop aufrufen.

Was mache ich falsch? Oder muß ich hier mit Threads anfangen?

Code:
package javazoom.jl.player;

import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.SWT;

public class GUI {

	private Shell sShell = null;
	private Button button = null;

	public static void main(String[] args) {
		Display display = Display.getDefault();
		GUI thisClass = new GUI();
		thisClass.createSShell();
		thisClass.sShell.open();

		while (!thisClass.sShell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	/**
	 * This method initializes sShell
	 */
	private void createSShell() {
		sShell = new Shell();
		sShell.setText("Shell");
		sShell.setSize(new Point(300, 200));
		button = new Button(sShell, SWT.NONE);
		button.setBounds(new org.eclipse.swt.graphics.Rectangle(179,112,89,30));
		button.setText("play");
		button.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
			public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
				jlp test = new jlp("-url http://81.201.113.93:9000");
				String[] datei = new String[2];
				datei[0] = "-url";
				datei[1] = "http://81.201.113.93:9000";
				try
				{
					jlp player = test.createInstance(datei);
					if (player!=null)
						player.play();
					test.play();	
				}
				catch (Exception ex) {
					System.out.println("mau");
				}
			}
		});
	}

}
 

Mag1c

Top Contributor
Hi,

das ist die einzig richtige logische Schlußfolgerung: Pack den Player in einen Thread ! Dann kannste auch wieder einen Button bedienen und den Player stoppen.

Gruß
Mag1c
 
G

Guest

Gast
So, meine GUI lüpt jetzt. Danke für die Hilfe. Hab jetzt leider noch ein Problemchen:

Ich rufen die Funktion player.play() als Thread auf. Mein Problem ist jetzt, dass der Thread ja nicht in einer Schleif läuft sondern nur mit dem player.play() beschäftigt ist. Also isInterrupted fällt dann schon mal aus.
Wie kann ich jetzt von außen player.close() aufrufen?

Code:
public void run() {
  
  while (true) {
   System.out.println("mau");
   if ( isInterrupted() == true ) {
    System.out.println( "Hurra" );
    break;
   }
   try {
   System.out.println("play");
   GUIPlay player = createInstance(file);
   if (player!=null) {
    player.play();
   }
   }
   catch (Exception ex) {
  System.err.println(ex);
  ex.printStackTrace(System.err);
  retval = 1;
   }
  }
 }
 

Mag1c

Top Contributor
Hi,

wozu ist da eine while-Schleife im Thread ? Ich denke mal, die brauchst du nicht. Das player.close() (oder player.stop() ?) kannst du ganz normal aus dem GUI-Thread aufrufen (z.B. wenn ein Button gedrückt wurde). Dafür mußt du dir natürlich irgendwo den Thread oder das Runnable merken um an die Player-Instanz zu kommen.

Gruß
Mag1c
 
G

Guest

Gast
Danke, jetzt ist mir die Lösung eingefallen:
Ich hab den Player player einfach static gemacht, dann kann ich ja immer drauf zugreifen.

Danke für eure Hilfe :toll: , machmal brauche ich einfach etwas Anschub.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben