【发布时间】:2016-11-26 20:34:20
【问题描述】:
我正在尝试在执行 cmd 命令时获得响应式 JavaFX 图形界面。
我正在执行的命令如下。
youtube-dl.exe --audio-format mp3 --extract-audio https://www.youtube.com/watch?v=l2vy6pJSo9c
如您所见,这是一个 youtube 下载器,可将 youtube 链接转换为 mp3 文件。 我希望它在第二个线程中执行,而不是在主 FX 线程中。
我通过在 StartDownloadingThread 类中实现接口 Callable 解决了这个问题。
@Override
public Process call() throws Exception {
Process p = null;
p = ExecuteCommand(localCPara1, localCPara2, localDirectory).start();
try {
Thread.sleep(30);
}catch (InterruptedException e){}
return p;
}
ExecuteCommand 方法只返回一个ProcessBuilder 对象。
我尝试使用Thread.sleep 使程序返回到主线程,从而使应用程序响应。不幸的是,程序仍然冻结。
这就是方法调用的调用方式。
ExecutorService pool = Executors.newFixedThreadPool(2);
StartDownloadingThread callable = new StartDownloadingThread(parameter1, parameter2, directory);
Future future = pool.submit(callable);
Process p = (Process) future.get();
p.waitFor();
如何使用Callable 界面使我的 GUI 响应?
【问题讨论】:
标签: javafx executorservice callable youtube-dl