java - 如何在停止程序之前等待命令完成执行?
问题描述
这是我的代码:
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-player 并找到了这个 Project,代码片段所做的是创建一个新的 MP3Player 对象,创建一个新文件,并将其添加到播放列表中。之后,它才开始播放歌曲。但问题是它在程序停止执行之前只播放了大约一两秒的文件。如何等到 play() 函数停止执行?
答: 感谢 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...");
}
}
}
推荐阅读
- kotlin - 为什么 Kotlin 在 JVM 中盲目地将内部类改为 public?
- c# - 操作留言卡未呈现
- automation - TestCafé 如何计算来自选择器的元素截图的大小?
- ruby-on-rails - find_or_create by,如果找到,它会更新吗?
- c# - 参数对象的 Dapper 自定义映射
- c# - 如何生成具有所有负整数常量和校验和的 Crc-64 表?
- ios - 使用 Google SignIN 登录时如何检索用户数据?
- php - 如何在斜杠后隐藏 $_GET() 参数?
- jquery - 在行悬停时展开 TH 元素
- c# - 邀请用户加入 Azure 应用需要哪些角色和权限?