私はメインスレッドにいます。メニューからアイテムを選択するときは、guiが新しいパネルを表示する前にデータベースを呼び出す必要があります。これには時間がかかります。この間、私は待機カーソルを表示したい。 私は方法を見つけましたが、コードは醜いです。どのようにこれはよりエレガントに行うことができますか? この質問は、長時間実行されているタスクがguiで動作しているため、他の質問とは異なります。GUIが変更されるのを待っている間にJavaFXがカーソルを変更します
menuitem.setOnAction(event -> { szene.setCursor(Cursor.WAIT);
Task<Void> task = new Task<Void>()
{
@Override
public Void call() throws Exception
{
Platform.runLater(new Runnable()
{
@Override
public void run()
{
// do some stuff
szene.setCursor(Cursor.DEFAULT);
}
});
return null;
};
};
new Thread(task).start();
});
を全体 'Task'ロジックを置く' Platform.runLater'は 'Task'を使用しての全体の目的に反し内、ロジックは、UIスレッド上で実行すると同じように(カーソルの変更を含む)更新をブロックします。 – Itai
このようにして、カーソルはステータスを待って戻ってきます。コードは動作しますが、それは醜いです。 –
長時間実行されるタスクはUIを更新するため、UIスレッドで実行するのは正しいです。私は別の質問が見つかりました:http://stackoverflow.com/questions/27309642/javafx-updating-ui-from-a-thread-without-direct-calling-platform-runlaterおそらく私の解決策は正しいです。 –