Я пытаюсь получить гибкий графический интерфейс JavaFX при выполнении команды cmd.
Команда, которую я выполняю, следующая.Многопоточность с использованием Callable при наличии гибкого графического интерфейса
youtube-dl.exe --audio-format mp3 --extract-audio https://www.youtube.com/watch?v=l2vy6pJSo9c
Как вы видите, что это YouTube-загрузчик, который преобразует ссылку на канал в mp3-файл. Я хочу, чтобы это выполнялось во втором потоке, а не в основном потоке FX.
Я решил это, реализовав интерфейс Callable
в классе StartDownloadingThread
.
@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();
Как мне сделать мой GUI реагировать с помощью интерфейса Callable
?
Я действительно читал следующий учебник. https://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html#zz-7.5 О том, как решить Бесполезный пользовательский интерфейс. В разделе 7 этой статьи показано, как вы можете это сделать, используя Callable. Писатель использует Thread.sleep() для возврата в основной поток. – Mnemonics