簡體   English   中英

如何在停止程序之前等待命令完成執行?

[英]How do I wait for a command to finish executing before stopping the program?

這是我的代碼:

import java.io.File;
import jaco.mp3.player.MP3Player;

class SimpleAudioPlayer {

    public static void main(String[] args) {

        File audio_file = new File("Clarx - H.A.Y.mp3");
        MP3Player music_player = new MP3Player();
        music_player.addToPlayList(audio_file);
        music_player.play();
        // wait for music_player.play() to finish executing
    }
}

我想創建一個 mp3 播放器並找到了這個 Project ,代碼片段所做的是創建一個新的 MP3Player object,創建一個新文件,並將其添加到播放列表中。 之后,它才開始播放歌曲。 但問題是它在程序停止執行之前只播放了大約一兩秒的文件。 如何等到 play() function 停止執行?

答:感謝 giraycoskun !

import java.io.File;
import jaco.mp3.player.MP3Player;
import java.util.concurrent.*;

class SimpleAudioPlayer {

    public static void main(String[] args) {

        File audio_file = new File("Clarx - H.A.Y.mp3");
        MP3Player music_player = new MP3Player();
        music_player.addToPlayList(audio_file);
        ExecutorService threadpool = Executors.newCachedThreadPool();
        Future<Long> futureTask;
        futureTask = (Future<Long>) threadpool.submit(music_player::play);
        // Simple variable to check hpw often the folowing loop gets executed
        int n = 0;
        while (!futureTask.isDone()) {
            System.out.println("Executing" + n);
            n++;
        }
    }
}

我不得不對他提交的答案做一些小改動,但效果很好,非常感謝!

我還沒有在我的計算機上嘗試過代碼,但是這些可以提供幫助:

https://docs.oracle.com/javase/8/docs/api/?java/util/concurrent/package-summary.html

https://www.baeldung.com/java-asynchronous-programming

import java.io.File;
import jaco.mp3.player.MP3Player;
import java.util.concurrent;

class SimpleAudioPlayer {

    public static void main(String[] args) {

        File audio_file = new File("Clarx - H.A.Y.mp3");
        MP3Player music_player = new MP3Player();
        music_player.addToPlayList(audio_file);
        ExecutorService threadpool = Executors.newCachedThreadPool();
        Future<Long> futureTask = threadpool.submit(() -> music_player.play());
        while (!futureTask.isDone()) {
            // wait for music_player.play() to finish executing
            System.out.println("FutureTask is not finished yet..."); 
        } 
        
        
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM