処理1→処理2の順に行えるでしょうか。
コード上は処理1→処理2の順に行っているわけなので、質問意図は「処理1の結果を画面にすぐに反映されるようにする」ですね?
まずGUIアプリケーションの基本的な考え方として、GUI用のスレッド(JavaFXではJavaFXアプリケーションスレッド、swingではEDT(Event Disptach Thread)で時間のかかる処理を行うこと自体が不適切と言えます。そういうことをしてしまうとご質問のような問題がどうしても起きますので、GUI用スレッドとは別のスレッドにて実行するのが常とう手段です。例えば処理2が数ミリ秒以上の処理なら、GUI用のスレッドとは別のスレッドで行うことを検討した方がよいと思います。
別スレッドでの実行ですが、処理2が実際にどういった類のものなのか(常に動かしたいものか、一時的に行うようなものか等々)によって具体的な方式は変わってきます。例えばBGMを自動再生するようなものであればアプリケーション起動時に専用のスレッドを起動するなんてことをやったりしますし、必要に応じてということならその都度スレッドを起動したりします。それが高頻度で行われるなら(スレッドの起動オーバーヘッドを緩和する目的で)スレッドプール機構を利用する手もあります。
長時間処理を別スレッドでやる方式にはいろいろと難しいトピックについても学ばねばならないのですが、とりあえずバックグラウンドで何かやるだけのコードは以下のような雰囲気になります。
java
1void updateAndDoSomething() {
2 // 処理1: GUI更新
3 textField.setText(...);
4 ...
5 // 処理2: 別スレッドで行う
6 Thread t = new Thread(() -> {
7 doLongProcessing(); // なにか時間がかかる処理
8 });
9 t.setDaemon(true);
10 t.start();
11}
処理2の途中や完了時のタイミングでGUIを更新したいケースもよくあります。そうした場合別スレッドからGUIスレッドに向けてスレッド間通知機構によりGUI関連処理を依頼する形になりますが、そうした場合にはswingではSwingUtilities#runLater、JavaFXではPlatform#runLaterなどが便利です。
上記は素朴にTheadを直接使った例ですが、高機能な並行処理用ライブラリーがいろいろあるので調べてみるとよいと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/04 04:58 編集
2017/10/04 06:20 編集