Befehle an einen Thread senden?

Status
Nicht offen für weitere Antworten.

Blackskyliner

Mitglied
Hallo, ich hab ein Problem und zwar versuche ich mir einen kleinen Player zu Übungszwecken zu bauen.
Der SPielt auch schon ab alles kein Problem, nur komm ich nun zu dem Punkt, wo ein Pause, Resume, Stop auch schön wären...

Da hatte ich mir gedacht, da ich das Abspielen in einen Thread auslagere, dass ich einfach interrupt() aufrufe und der dann anhält das Lied abzuspielen... Machter aber nicht...
Weiß jemand eine Lösung für mein Problem?

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package mediaplayer;


/**
 *
 * @author Blackskyliner
 */
public class MediaplayerControlClass {
    String file;
    Thread PlayerHandle;
    
    
    public MediaplayerControlClass(String file){
        this.setMedia(file);
    }
    
    public MediaplayerControlClass(){
        this.setMedia("");
    }
    
    public void setMedia(String file){
        this.file = file;
    }
    
    public void play(){
        PlayerHandle = new Thread(new MediaplayerClass("E:\\Musik\\HB-Popcorn.mp3"));
        PlayerHandle.start();
    }
    
    public void pause(){
        /*if(PlayerHandle != null){
            try {
                PlayerHandle.wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(MediaplayerControlClass.class.getName()).log(Level.SEVERE, null, ex);
            }
        }*/
        PlayerHandle.interrupt();
    }
    
    public void resume(){
        /*if(PlayerHandle != null){
            PlayerHandle.notify();
        }*/
        PlayerHandle.resume();
    }
    
    public void stop(){
        if(PlayerHandle != null){
            PlayerHandle.stop();
        }
    }
}

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package mediaplayer;

import javax.sound.sampled.*;
import java.io.*;

/**
 *
 * @author Blackskyliner
 */
public class MediaplayerClass extends Thread {
    String file;
    boolean pause;
    
    @Override
    public void run(){
        testPlay();
    }
    
    public MediaplayerClass(String file){
        this.file = file;
    }
    
    public void play(){
        this.pause = false;
        this.testPlay();
    }
    
    public void pause(){
        this.pause = true;
    }
    
    
    public void testPlay()
    {
         String  filename = this.file;
        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.
        }
    } 
    
    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)
            {
                if(this.pause != true){
                    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:
    private MediaplayerControlClass MediaplayerControlHandle;
    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        //testPlay("E:\\Musik\\HB-Popcorn.mp3");
        /*java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MediaplayerClass().testPlay("E:\\Musik\\HB-Popcorn.mp3");
            }
        });*/
        //MediaplayerClass t = new MediaplayerClass();
        //t.run("E:\\Musik\\HB-Popcorn.mp3");
        
        MediaplayerControlHandle = new MediaplayerControlClass("E:\\Musik\\HB-Popcorn.mp3");
        MediaplayerControlHandle.play();
        
        //new Thread(new MediaplayerClass("E:\\Musik\\HB-Popcorn.mp3")).start();
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        if(MediaplayerControlHandle != null){
            MediaplayerControlHandle.pause();
        }
    }

Ich kamm nähmlich echt nicht weiter, da ich nicht weiß, wie ich eine Interprocess Kommunikation zustande bringen kann...


Danke
Blackskyliner
 

Pappenheimer++

Bekanntes Mitglied
Die interrupt()-Methode beendet nur sehr "spezielle" Operationen wie Thread.sleep() mit einer interruptedException, ansonsten setzt die Methode nur ein Flag und weiter nichts. Meine erste Idee bezüglich deines Problems wäre , im Abspiel-Thread periodisch auf isInterrupted() zu überprüfen und dann ggf. den Abspielvorgang zu stoppen o.ä. Aber da gibt es bestimmt Jemanden, der da ne bessere Idee hat.
 

Blackskyliner

Mitglied
Wenn ich isInterrupted() müsst ich das ja aber erstmal irgendwie schaffen den überhaupt zu interrupten...

Das ist ja das eigentliche und somit essenzielle Problem...

Unter C++ würd ich jetzt ne Globale Variable machen, da ein Mutex drauf haun und die dann immer dementsprechend überprüfen und lesend/schreibend darauf zugreifen...

Da man unter Java ja aber meines Erachtens nach keine Globalen Variablen unterhalb von Klass hat??? und es eine ziemlich bescheidene Variante wäre.... kommt des auch eigentlich nit in Frage...

Wäre halt schön, wenns jemand weiß :)

Ein Tutorial über Interprocess Kommunikation würde mir ja auch schon reichen (solange es Java spezifisch ist)


EDIT: suspend() und resume() machen das was ich gesucht habe...
Problem gelöst. Wenn jemanden trotzdem noch was einfällt, wie man z.B. über einen Htread Handle Funktionen der Thread-Abgeleiteten Klasse aufrufen kann der kann des Posten, da das auch noch interesannt wäre...

Soo häkchen ist gesetzt =)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
RudiRüssel Befehle - Maschinenprogramme Java Basics - Anfänger-Themen 6
H Befehle in einem Menü aktivieren Java Basics - Anfänger-Themen 1
D import Befehle Java Basics - Anfänger-Themen 3
F Linux Befehle zum Übersetzen Java Basics - Anfänger-Themen 1
L Linux Befehle unter Windows in Eclipse ausführen Java Basics - Anfänger-Themen 3
D Erste Schritte Weitere Befehle implementieren Java Basics - Anfänger-Themen 27
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
RowdyN Methoden Befehle in zufälliger Reihenfolge ausführen lassen Java Basics - Anfänger-Themen 5
D Input/Output Mehrere Befehle nacheinander ausführen Java Basics - Anfänger-Themen 20
L Text/Befehle zu Programmen senden Java Basics - Anfänger-Themen 1
C Java und "normale" Befehle Java Basics - Anfänger-Themen 3
M Input/Output Allg. Befehle an die cmd.exe senden Java Basics - Anfänger-Themen 9
N Mit Java Befehle auf Konsole ausführen Java Basics - Anfänger-Themen 4
F alle 100ms Befehle ausführen Java Basics - Anfänger-Themen 26
S Befehle in ProcessBuilder nachschieben Java Basics - Anfänger-Themen 2
J Befehle aus anderen Klassen ausführen Java Basics - Anfänger-Themen 8
F Befehle von Java class ausführen Java Basics - Anfänger-Themen 3
F Befehle wiederholen Java Basics - Anfänger-Themen 7
B Threads Geschwindigkeit der Befehle auf verschiedenen PCs gleich machen Java Basics - Anfänger-Themen 3
G Kombination zweier Befehle (Preis festlegen & Rabatt berechnen) Java Basics - Anfänger-Themen 3
D Input/Output Stringbuffer Befehle bei Konvertierung in String Java Basics - Anfänger-Themen 19
C Nach Java-Installation sind Befehle erfolglos Java Basics - Anfänger-Themen 4
J Unklare Befehle Java Basics - Anfänger-Themen 4
K .bat Dateien starten, Ausgabe einlesen und Befehle übergeben Java Basics - Anfänger-Themen 32
H Befehle an andere Programme Java Basics - Anfänger-Themen 8
M Befehle der Eingabeaufforderung Java Basics - Anfänger-Themen 2
S return(Bedingung) ? [mehrere Befehle] Java Basics - Anfänger-Themen 5
M Umgebungsvariable gesetzt, aber nicht alle Befehle ausführbar Java Basics - Anfänger-Themen 6
M TextWrangler/VIM- Manche Befehle werden nicht farblich hervorgehoben Java Basics - Anfänger-Themen 3
S Mehrere Return-Befehle in einer Methode Java Basics - Anfänger-Themen 23
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
N 2 Befehle zu einem machen Java Basics - Anfänger-Themen 10
K Shell Befehle mit Java aufrufen Java Basics - Anfänger-Themen 5
G CMD Befehle übergeben Java Basics - Anfänger-Themen 2
J Java Konsolenprogramm Befehle(Optionen) übergeben Java Basics - Anfänger-Themen 7
K Wieviele Befehle pro .java Datei Java Basics - Anfänger-Themen 4
C Befehle finden / Befehle richtig suchen Java Basics - Anfänger-Themen 5
E Befehle Java Basics - Anfänger-Themen 3
D MS Dos Befehle mit java Java Basics - Anfänger-Themen 3
G Falsche Java befehle, doch was ist falsch? Java Basics - Anfänger-Themen 9
D Win98 erkennt keine java Befehle.Umgebungsvariablen falsch? Java Basics - Anfänger-Themen 7
B Alt-Befehle Java Basics - Anfänger-Themen 4
C System.exit(int) und andere ähnliche Befehle Java Basics - Anfänger-Themen 5
R MS-DOS-Befehle ausführen Java Basics - Anfänger-Themen 11
S Befehle an externe Programme Java Basics - Anfänger-Themen 4
L Dos Befehle via Java Java Basics - Anfänger-Themen 4
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
P Gibt es einen anderen Weg um "{}" in IntelliJ zu schreiben? Java Basics - Anfänger-Themen 5
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
N Gibt es hierfür einen Shortcut Java Basics - Anfänger-Themen 5
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
Poppigescorn Mithilfe einer Arrayliste einen Notenspiegel ausgeben Java Basics - Anfänger-Themen 12
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
Devin Wo kann man einen Java Lehrplan finden? Java Basics - Anfänger-Themen 5
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
S First Time Mave: Wie ergänze ich einen Source-Folder? Java Basics - Anfänger-Themen 10
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
F Hilfe für einen Anfänger! Java Basics - Anfänger-Themen 4
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
N Wie kann ich einen String wieder zusammensetzen und ausgeben lassen? Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
T Einen Stern malen Java Basics - Anfänger-Themen 32
T Einen Stern malen Java Basics - Anfänger-Themen 2
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Mit for Schleife einen String Rückwärts befüllen Java Basics - Anfänger-Themen 9
J Einen Buttonklick in Label anzeigen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben