2017-09-27 5 views
0

J'ai créé un Thread qui joue une chanson d'une classe Runnable implémentée (Soundtrack), je veux l'arrêter en appuyant sur mon bouton (jMenuItem1ActionPerformed). Je ai googlé & essayé de nombreuses façons d'arrêter mais échoué, je pense que dans mon cas, il y a une autre façon de le faire. Le code ci-dessous:Comment arrêter un Thread en appuyant sur un bouton Java Swing?

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

Pouvez-vous appeler player.stop() ou quelque chose comme ça? – jwils

+0

Non je ne peux pas mais il y a player.close(), je ne peux pas l'appeler comme Player player = new Player(); player.close(); J'ai dû mettre toutes les commandes essayer et attraper même si cela ne fonctionne toujours pas, je pense que la classe Player n'est pas de Java à l'origine, j'ai ajouté une nouvelle bibliothèque JLayer 1.0.1 de http://www.javazoom.net/index.shtml afin de lire des fichiers mp3, ce sont les commandes que je peux définir dans le lecteur .: close(); est égal à (Objet o); getClass(); getPosition(); hashCode(); est complet(); notifier(); notifyAll(); jouer(); jouer (int i); toString(); attendez(); attendre (long l); attendez (long l, int i). – Rafa

Répondre

0

Je veux remercier ma soeur pour la solution:

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

Correct. Mais vous pourriez bénéficier de l'apprentissage de [exécuteurs] (https://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html) et 'Future'. –