2017-09-27 1 views
0

Ich habe einen Thread erstellt, der einen Song aus einer implementierten Runnable-Klasse (Soundtrack) spielt, ich möchte ihn stoppen, indem ich meine Taste drücke (jMenuItem1ActionPerformed). Ich googelte es & versuchte viele Möglichkeiten zu stoppen, aber fehlgeschlagen Ich denke, in meinem Fall gibt es einen anderen Weg, das zu tun. Der folgende Code unten:Wie man einen Thread durch Drücken einer Java Swing-Taste stoppt?

public static class Soundtrack implements Runnable { 
    @Override 
    public void run() { 
     try{ 
     File file = new File("SF.mp3"); 
     FileInputStream fis = new FileInputStream(file); 
     BufferedInputStream bis = new BufferedInputStream(fis); 

     try{ 
      Player player = new Player(bis); 
      player.play(); 
     }catch(JavaLayerException ex){} 
    }catch(IOException e){} 
    } 
    } 
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
}  
public static void main(String args[]) { 
    Thread background = new Thread(new Soundtrack()); 
    background.start(); 
} 
+0

Können Sie player.stop() aufrufen oder so etwas? – jwils

+0

Nein, ich kann nicht, aber es gibt player.close(), ich kann es nicht nennen wie Player player = new Player(); player.close(); Ich musste alle try und catch-Befehle setzen, obwohl das immer noch nicht funktioniert, ich denke, dass Player Klasse nicht von Java ist, ursprünglich habe ich eine neue Bibliothek JLayer 1.0.1 von http://www.javazoom.net/index.shtml hinzugefügt Um mp3-Dateien abzuspielen, sind dies die Befehle, die ich im Player einstellen kann .: close(); gleich (Objekt o); getClass(); getPosition(); Hash-Code(); ist komplett(); benachrichtigen(); notifyAll(); abspielen(); spielen (int i); toString(); warten(); warte (lang l); warte (lang l, int i). – Rafa

Antwort

0

Ich möchte danke meiner Schwester für die Lösung:

public static class Soundtrack implements Runnable { 
    @Override 
    public void run() { 
     try{ 
     File file = new File("SF.mp3"); 
     FileInputStream fis = new FileInputStream(file); 
     BufferedInputStream bis = new BufferedInputStream(fis); 

     try{ 
      Player player = new Player(bis); 
      player.play(); 
     }catch(JavaLayerException ex){} 
    }catch(IOException e){} 
    } 
    } 
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
     background.stop();  
}           
private static Thread background; 
public static void main(String args[]) { 
    background = new Thread(new Soundtrack()); 
    background.start(); 
} 
+0

Korrigieren. Aber Sie könnten davon profitieren, wenn Sie [Executoren] (https://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html) und 'Future' kennen lernen. –