Не могу остановить песню, потому что она должна закончиться до запуска других строк - PullRequest
0 голосов
/ 24 ноября 2018

Я просто хочу, чтобы он мог останавливаться на полпути во время воспроизведения песни, но не уверен, как мне это нужно сделать?Нужно ли нарезать резьбу?

public class playMusic {
   public static void main(String[] args){
      try{
          FileInputStream fileInputStream = new FileInputStream("*filePath*");
          Player player = new Player(fileInputStream);
          player.play();
          player.close();
      }catch(FileNotFoundException e){
          e.printStackTrace();
      }catch(JavaLayerException e){
          e.printStackTrace();
      }
   }
}

1 Ответ

0 голосов
/ 24 ноября 2018

Если вы хотите, чтобы программа запускала два отдельных потока одновременно, взгляните на Concurrency / Threads.Пример:

class PlayerThread extends Thread {
    private final Player player;

    PlayerThread(Player player) {
        this.player = player;
    }

    public void run() {
        try {
            player.play();
        } catch (JavaLayerException e) {
            e.printStackTrace();
        }
    }
}

class Main {
    public static void main(String[] args) throws InterruptedException {
        String filename = "*filename*";
        try (FileInputStream fileInputStream = new FileInputStream(filename)) {
            // load the file
            Player player = new Player(fileInputStream);
            // start playing music in separate thread
            new PlayerThread(player).start();

            // wait until you want to stop the music,
            // or do something else, maybe wait for user's decision
            Thread.sleep(10_000); // 10 seconds
            // close the player
            player.close();
        } catch (JavaLayerException | IOException e) {
            e.printStackTrace();
        }
    }

, таким образом, один поток запускает музыку, в то время как вы можете взаимодействовать с другим и давать команды.Имейте в виду, параллелизм - это большая и сложная тема, если вы никогда ее не используете, у вас могут возникнуть проблемы.Изучите учебник:

https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

...