cmdコマンドを実行しているときに応答性の高いJavaFXグラフィカルインターフェイスを取得しようとしています。
実行しているコマンドは次のとおりです。応答可能なグラフィカルインターフェイスを使用しているときにCallableを使用したマルチスレッド
youtube-dl.exe --audio-format mp3 --extract-audio https://www.youtube.com/watch?v=l2vy6pJSo9c
ご覧のとおり、YouTubeのリンクをmp3ファイルに変換するyoutube-downloaderです。 これは、メインのFXスレッドではなく、2番目のスレッドで実行します。
私は、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;
}
ProcessBuilder
だけオブジェクトを返すExecuteCommand
方法。
私は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を応答させるにはどうすればよいですか?
私は実際に次のチュートリアルを読んでいました。 https://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html#zz-7.5 Unresponsive User Interfaceの解決方法についてこの記事の第7章では、Callableを使用してどのように行うことができるかを示しています。作者はThread.sleep()を使ってメインスレッドに制御を返します。 – Mnemonics