public abstract class Task<V> extends FutureTask<V> implements Worker<V>, EventTarget
FutureTask
の完全に監視可能な実装。Taskは、Worker
インタフェースで定義されているように、JavaFXでの非同期タスクのプログラミングに有用な、追加の状態および監視可能なプロパティを公開します。Taskの実装は、call()
メソッドをオーバーライドする必要があります。このメソッドはバックグラウンド・スレッドで呼び出されます。このメソッドで使用される状態は、バックグラウンド・スレッドからの読取りおよび書込みに対して安全である必要があります。たとえば、このメソッドから実行中のシーン・グラフを操作することは安全ではなく、ランタイム例外になります。
Taskには柔軟性があり、処理のカプセル化に非常に有用です。Service
はTaskを実行するように設計されているため、アプリケーションまたはライブラリ・コードによって定義されたTaskは、Serviceで簡単に使用できます。同様に、TaskはFutureTaskから拡張されているため、TaskをjavaコンカレンシーExecutor
APIで使用することは、非常に簡単で自然です。TaskはRunnableであるため、別のバックグラウンド・スレッドから直接(FutureTask.run()
メソッドを呼び出すことによって)呼び出すこともできます。これにより処理のコンポジションが可能になり、または手動で構築および実行された新しいThreadにそれを渡します。最後に、新しいThreadを手動で作成してそれにRunnableを渡すことができるため、次のイディオムを使用できます。
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
このコードはThreadのデーモン・フラグをtrueに設定することに注意してください。最後のステージがクローズされた後にVMが存在することをバックグラウンド・スレッドによって防ぐ場合は、デーモンをfalseにします。ただし、すべてのステージがクローズされた後にバックグラウンド・スレッドを単純に終了する場合は、デーモンをtrueに設定する必要があります。
ExecutorService
はRunnableをとる複数のメソッドを定義しますが、一般的にはExecutor
から継承されたexecute
メソッドの使用に制限する必要があります。
FutureTaskと同様に、Taskはワンショット・クラスであり再利用できません。再利用可能なWorker
については、「Service
」を参照してください。
TaskはJavaFX GUIアプリケーションで使用するように設計されているため、publicプロパティに対するすべての変更や、状態、エラーおよびイベント・ハンドラに関する変更通知は、すべてメインのJavaFXアプリケーション・スレッド上で発生することが保証されます。これらのプロパティにバックグラウンド・スレッド(call()
メソッドを含む)からアクセスすると、ランタイム例外が発生します。これに該当しないのはTaskを最初に構成する場合のみであり、これは任意のスレッドから安全に実行できます。ただし、Taskが初期化および起動されると、以降はFXスレッドからのみ使用できます(サブクラスがバックグラウンド・スレッドから起動することが適切であると明確に示されているメソッドを除きます)。
Taskが動作する不変の状態ですべてのTaskを初期化することをお薦めします。これは、Taskの実行に必要なパラメータをとるTaskコンストラクタを提供することで実行する必要があります。不変の状態によって、任意のスレッドからの使用が簡単で安全になり、複数のスレッドがある場合の正しさが確保されます。
Javaでは、プロセス内のスレッドを確実に強制終了する方法はありません。ただし、Taskでcancel
が呼び出される場合、Taskが処理を停止することが重要です。ランナウェイ・タスクは、Taskが取り消された後も、message、textおよびprogressプロパティの処理および更新を続行する可能性があります。Javaでは、Taskの取消しは協調的に試行されます。Taskのユーザーが取消しを要求し、Taskの作成者がcall
メソッドの本体で取り消されたかどうかをチェックする必要があります。これを行うには、2つの方法があります。最初に、Task作成者はFutureTask
から継承されたisCancelledメソッドをチェックして、Taskが取り消されたかどうかを確認できます。次に、Task実装がブロッキング呼出し(NIO InterruptibleChannelsやThread.sleepなど)を使用しており、そのようなブロッキング呼出し中にタスクが取り消される場合は、InterruptedExceptionがスローされます。ブロッキング呼出しを含むTask実装は、中断されたスレッドがタスクが取り消されたことを示している可能性があることを認識し、isCancelledメソッドを再確認して、Taskの取消しによってInterruptedExceptionがスローされたことを確認します。
次の一連の例では、Taskの最も一般的な使用方法のいくつかを示します。
最初の例は、特に有用なことは何も行いませんが、Taskを正しく記述することの基本的な側面を示す単純なループです。この例では、単純にループして、ループの反復ごとに標準出力に出力します。完了すると、反復した回数を返します。
Task<Integer> task = new Task<Integer>() {
@Override protected Integer call() throws Exception {
int iterations;
for (iterations = 0; iterations < 100000; iterations++) {
if (isCancelled()) {
break;
}
System.out.println("Iteration " + iterations);
}
return iterations;
}
};
最初に、このTaskから返される値のタイプを定義します。この場合は、反復した回数を返すため、総称型を使用してTaskがタイプIntegerであることを指定します。次に、call
メソッドの実装内で、0から100000まで反復します。反復ごとに、このTaskが取り消されたかどうかを確認します。該当する場合は、ループを抜けて反復した回数を返します。それ以外の場合は、メッセージがコンソールに出力され、反復回数が増加し、ループが続行されます。
ループ本体でのisCancelled()のチェックは重要であり、これを実行しないと、開発者がタスクを取り消す場合がありますが、タスクは引き続き実行され、両方の進捗を更新してcall
メソッドの最後から誤った結果を返します。Taskの正しい実装では、取消しを常にチェックします。
前の例と似ていますが、ここでは反復ごとのTaskの進捗を変更します。取消しの場合に選択肢があることに注意してください。Taskが取り消されたときに進捗を-1 (不確定)に戻しますか、それとも進捗をその時点のままにしておきますか。この場合は、進捗はそのままにしておき、取消しのメッセージの更新のみを行いますが、取消し後の進捗の更新は完全に有効な選択肢です。
Task<Integer> task = new Task<Integer>() {
@Override protected Integer call() throws Exception {
int iterations;
for (iterations = 0; iterations < 10000000; iterations++) {
if (isCancelled()) {
updateMessage("Cancelled");
break;
}
updateMessage("Iteration " + iterations);
updateProgress(iterations, 10000000);
}
return iterations;
}
};
前と同様に、forループ内で、Taskが取り消されたかどうかをチェックします。取り消された場合は、Taskのメッセージを更新して取り消されたことを示し、前と同様に中断します。Taskが取り消されていない場合は、そのメッセージを更新して現在の反復を示し、進捗を更新して現在の進捗を示します。
この例では、前の例にブロッキング・コールを追加します。ブロッキング・コールはInterruptedExceptionをスローする場合があり、またInterruptedExceptionはTaskの取消しの結果として発生する場合があるため、確実にInterruptedExceptionを処理し、取消し状態を調べる必要があります。
Task<Integer> task = new Task<Integer>() {
@Override protected Integer call() throws Exception {
int iterations;
for (iterations = 0; iterations < 1000; iterations++) {
if (isCancelled()) {
updateMessage("Cancelled");
break;
}
updateMessage("Iteration " + iterations);
updateProgress(iterations, 1000);
// Now block the thread for a short time, but be sure
// to check the interrupted exception for cancellation!
try {
Thread.sleep(100);
} catch (InterruptedException interrupted) {
if (isCancelled()) {
updateMessage("Cancelled");
break;
}
}
}
return iterations;
}
};
ここでは、ループの本体にThread.sleep
呼出しを追加しました。これはブロッキング・コールであるため、InterruptedExceptionの可能性を処理する必要があります。catchブロック内で、Taskが取り消されたかどうかをチェックし、取り消された場合はそのようにメッセージを更新してループを抜けます。
有用な処理を実行するために、ほとんどのTaskにはパラメータが必要です。たとえば、DeleteRecordTaskには、データベースから削除するオブジェクトまたは主キーが必要です。ReadFileTaskには、読み取るファイルのURIが必要です。Taskはバックグラウンド・スレッドで動作するため、call
メソッドの本体が、共有された状態を読み取ったり変更しないように注意する必要があります。これを行うために最も有用な2つの手法があり、それらはfinal変数の使用と、構築中に変数をTaskに渡すことです。
Taskを匿名クラスとして使用する場合、Taskにパラメータを渡す最も自然な方法は、final変数の使用です。この例では、Taskが反復する合計回数をTaskに渡します。
final int totalIterations = 9000000;
Task<Integer> task = new Task<Integer>() {
@Override protected Integer call() throws Exception {
int iterations;
for (iterations = 0; iterations < totalIterations; iterations++) {
if (isCancelled()) {
updateMessage("Cancelled");
break;
}
updateMessage("Iteration " + iterations);
updateProgress(iterations, totalIterations);
}
return iterations;
}
};
totalIterations
はfinalであるため、call
メソッドはそれを安全に読み取り、バックグラウンド・スレッドから参照できます。
(特定用途の実装ではなく) Taskライブラリを記述する場合は、異なる手法を使用する必要があります。この場合は、前述したのと同じ処理を実行するIteratingTaskを作成します。今度は、IteratingTaskは固有のファイル内に定義されるため、そのコンストラクタで渡されるパラメータが必要です。これらのパラメータはfinal変数に割り当てられます。
public class IteratingTask extends Task<Integer> {
private final int totalIterations;
public IteratingTask(int totalIterations) {
this.totalIterations = totalIterations;
}
@Override protected Integer call() throws Exception {
int iterations = 0;
for (iterations = 0; iterations < totalIterations; iterations++) {
if (isCancelled()) {
updateMessage("Cancelled");
break;
}
updateMessage("Iteration " + iterations);
updateProgress(iterations, totalIterations);
}
return iterations;
}
}
使用されるときは、次のようになります。
IteratingTask task = new IteratingTask(8000000);
この方法では、パラメータはIteratingTaskに安全に渡され、繰返しになりますがfinalです。したがって、call
メソッドはこの状態をバックグラウンド・スレッドから安全に読み取ることができます。
警告: 可変の状態をTaskに渡してそれをバックグラウンド・スレッドから操作しないでください。これを実行すると、競合状態が発生する場合があります。たとえば、コンストラクタ内のCustomerをとるSaveCustomerTaskがあるとします。SaveCustomerTaskにCustomerへのfinal参照がある場合がありますが、Customerオブジェクトが可変である場合、SaveCustomerTaskと他のアプリケーション・コードの両方が異なるスレッドからCustomerの状態を読み取ったり変更している可能性があります。このような場合、このCustomerのような可変のオブジェクトがバックグラウンド・スレッドから使用されている間は、それが別のスレッドからも使用されていないことに注意してください。特に、バックグラウンド・スレッドがデータベースからデータを読み取ってCustomerオブジェクトを更新しており、Customerオブジェクトがシーン・グラフ・ノード(UIコントールなど)にバインドされている場合は、スレッド・ルール違反が発生する可能性があります。そのような場合については、バックグラウンド・スレッドからではなく、FXアプリケーション・スレッドからCustomerオブジェクトを変更します。
public class UpdateCustomerTask extends Task<Customer> {
private final Customer customer;
public UpdateCustomerTask(Customer customer) {
this.customer = customer;
}
@Override protected Customer call() throws Exception {
// pseudo-code:
// query the database
// read the values
// Now update the customer
Platform.runLater(new Runnable() {
@Override public void run() {
customer.setF setFirstName(rs.getString("FirstName"));
// etc
}
});
return customer;
}
}
ほとんどではないにしても、多くのTaskは完了時に値を返します。CRUDタスクでは、作成タスクは新しく作成されたオブジェクトまたは主キーを返し、読取りタスクは読取りオブジェクトを返し、更新タスクは更新されたレコード数を返し、削除タスクは削除されたレコード数を返すことが予期されます。
ただし、返すことが有用なものが何もない場合があります。たとえば、ファイルに書き込むTaskがあるとします。Taskには、成功したか失敗したか、および書き込まれたバイト数(進捗)を示すためのメカニズムが組み込まれており、返すものはありません。そのような場合は、Void型を使用できます。これはJava言語の特別な型であり、値null
のみを割り当てることができます。次のように使用します。
final String filePath = "/foo.txt";
final String contents = "Some contents";
Task<Void> task = new Task<Void>() {
@Override protected Void call() throws Exception {
File file = new File(filePath);
FileOutputStream out = new FileOutputStream(file);
// ... and other code to write the contents ...
// Return null at the end of a Task of type Void
return null;
}
};
ListView、TableViewおよびその他のUIコントロールとシーン・グラフ・ノードではObservableListが使用されるため、TaskからObservableListを作成して返すことは一般的です。中間値を表示しない場合、そのようなTaskを正しく記述する最も簡単な方法は、単純にcall
メソッド内でObservableListを構築し、Taskの最後でそれを返すことです。
Task<ObservableList<Rectangle>> task = new Task<ObservableList<Rectangle>>() {
@Override protected ObservableList<Rectangle> call() throws Exception {
updateMessage("Creating Rectangles");
ObservableList<Rectangle> results = FXCollections.observableArrayList();
for (int i=0; i<100; i++) {
if (isCancelled()) break;
Rectangle r = new Rectangle(10, 10);
r.setX(10 * i);
results.add(r);
updateProgress(i, 100);
}
return results;
}
};
前述の例では、100個の矩形を作成してこのタスクから返します。ObservableListはcall
メソッド内で作成され、移入され、返されます。
結果の一部を返すTaskを作成する場合があります。複雑なシーン・グラフを構築しており、構築中のシーン・グラフを表示します。または、大量のデータをネットワーク経由で読み取っており、データの到着にあわせてエントリをTableViewで表示します。そのような場合、FXアプリケーション・スレッドとバックグラウンド・スレッドの両方で使用できる共有された状態があります。共有された状態をFXアプリケーション・スレッド以外のスレッドから更新しないように十分に注意する必要があります。
これを行う最も簡単な方法は、updateValue(Object)
メソッドを利用することです。このメソッドは、バックグラウンド・スレッドから繰り返し呼び出すことができます。FXイベント・キューが飽和状態になるのを防ぐために、更新は結合されます。つまり、バックグラウンド・スレッドから任意の頻度で呼び出すことができますが、最終的には最新の設定が設定されます。
Task<Long> task = new Task<Long>() {
@Override protected Long call() throws Exception {
long a=0;
long b=1;
for (long i = 0; i < Long.MAX_VALUE; i++){
updateValue(a);
a += b;
b = a - b;
}
return a;
}
};
これを行う別の方法は、結果の一部を表す新しいプロパティをTaskで公開することです。その場合、結果の一部を更新するときは必ずPlatform.runLater
を使用します。
Task<Long> task = new Task<Long>() {
@Override protected Long call() throws Exception {
long a=0;
long b=1;
for (long i = 0; i < Long.MAX_VALUE; i++){
final long v = a;
Platform.runLater(new Runnable() {
@Override public void run() {
updateValue(v);
}
}
a += b;
b = a - b;
}
return a;
}
};
1つの値を更新するのではなく、結果が取得されるのにあわせてObservableListに移入するとします。1つの方法は、結果の一部を表す新しいプロパティをTaskで公開することです。その場合、新しい項目を結果の一部に追加するときは必ずPlatform.runLater
を使用します。
public class PartialResultsTask extends Task<ObservableList<Rectangle>> {
// Uses Java 7 diamond operator
private ReadOnlyObjectWrapper> partialResults =
new ReadOnlyObjectWrapper<>(this, "partialResults",
FXCollections.observableArrayList(new ArrayList()));
public final ObservableList getPartialResults() { return partialResults.get(); }
public final ReadOnlyObjectProperty> partialResultsProperty() {
return partialResults.getReadOnlyProperty();
}
@Override protected ObservableList call() throws Exception {
updateMessage("Creating Rectangles...");
for (int i=0; i<100; i++) {
if (isCancelled()) break;
final Rectangle r = new Rectangle(10, 10);
r.setX(10 * i);
Platform.runLater(new Runnable() {
@Override public void run() {
partialResults.get().add(r);
}
});
updateProgress(i, 100);
}
return partialResults.get();
}
}
一般に、TaskはUIと直接はやり取りしません。これを行うと、特定のTask実装とUIの特定の部分との間に密結合が作成されます。ただし、そのような結合を作成する場合は、シーン・グラフの変更がFXアプリケーション・スレッドで発生するように、必ずPlatform.runLater
を使用する必要があります。
final Group group = new Group();
Task<Void> task = new Task<Void>() {
@Override protected Void call() throws Exception {
for (int i=0; i<100; i++) {
if (isCancelled()) break;
final Rectangle r = new Rectangle(10, 10);
r.setX(10 * i);
Platform.runLater(new Runnable() {
@Override public void run() {
group.getChildren().add(r);
}
});
}
return null;
}
};
Taskで状態変更が発生するたびに、その進捗、メッセージ、テキストを更新するTask、または別の方法で対応するTaskを記述する場合があります。たとえば、Failure、Success、RunningまたはCancelled状態の変更時に、Taskでステータス・メッセージを変更する場合があります。
Task<Integer> task = new Task<Integer>() {
@Override protected Integer call() throws Exception {
int iterations = 0;
for (iterations = 0; iterations < 100000; iterations++) {
if (isCancelled()) {
break;
}
System.out.println("Iteration " + iterations);
}
return iterations;
}
@Override protected void succeeded() {
super.succeeded();
updateMessage("Done!");
}
@Override protected void cancelled() {
super.cancelled();
updateMessage("Cancelled!");
}
@Override protected void failed() {
super.failed();
updateMessage("Failed!");
}
};
型 | プロパティと説明 |
---|---|
ReadOnlyObjectProperty<Throwable> |
exception
発生した例外を表すReadOnlyObjectPropertyを取得します。
|
ReadOnlyStringProperty |
message
メッセージを表すReadOnlyStringPropertyを取得します。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onCancelled
Task状態遷移がCANCELLED状態になるたびにonCancelledイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onFailed
Task状態遷移がFAILED状態になるたびにonFailedイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onRunning
Task状態遷移がRUNNING状態になるたびにonRunningイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onScheduled
Task状態遷移がSCHEDULED状態になるたびにonScheduleイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onSucceeded
Task状態遷移がSUCCEEDED状態になるたびにonSucceededイベント・ハンドラが呼び出されます。
|
ReadOnlyDoubleProperty |
progress
進捗を表すReadOnlyDoublePropertyを取得します。
|
ReadOnlyBooleanProperty |
running
Workerを実行しているかどうかを表すReadOnlyBooleanPropertyを取得します。
|
ReadOnlyObjectProperty<Worker.State> |
state
現在の状態を表すReadOnlyObjectPropertyを取得します。
|
ReadOnlyStringProperty |
title
タイトルを表すReadOnlyStringPropertyを取得します。
|
ReadOnlyDoubleProperty |
totalWork
実行する必要がある最大処理量を表すReadOnlyDoublePropertyを取得します。
|
ReadOnlyObjectProperty<V> |
value
値を表すReadOnlyObjectPropertyを取得します。
|
ReadOnlyDoubleProperty |
workDone
現在の進捗を表すReadOnlyDoublePropertyを取得します。
|
Worker.State
コンストラクタと説明 |
---|
Task()
新しいTaskを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
<T extends Event> |
addEventFilter(EventType<T> eventType, EventHandler<? super T> eventFilter)
このタスクにイベント・フィルタを登録します。
|
<T extends Event> |
addEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler)
このタスクにイベント・ハンドラを登録します。
|
EventDispatchChain |
buildEventDispatchChain(EventDispatchChain tail)
このターゲットのイベント・ディスパッチ・チェーンを構築します。
|
protected abstract V |
call()
Taskが実行されるときに呼び出され、callメソッドはサブクラスによってオーバーライドおよび実装される必要があります。
|
boolean |
cancel()
このWorkerの実行を終了します。
|
boolean |
cancel(boolean mayInterruptIfRunning) |
protected void |
cancelled()
Taskの状態がCANCELLED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。
|
ReadOnlyObjectProperty<Throwable> |
exceptionProperty()
発生した例外を表すReadOnlyObjectPropertyを取得します。
|
protected void |
failed()
Taskの状態がFAILED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。
|
void |
fireEvent(Event event)
指定されたイベントを起動します。
|
Throwable |
getException()
プロパティexceptionの値を取得します。
|
String |
getMessage()
プロパティmessageの値を取得します。
|
EventHandler<WorkerStateEvent> |
getOnCancelled()
Task状態遷移がCANCELLED状態になるたびにonCancelledイベント・ハンドラが呼び出されます。
|
EventHandler<WorkerStateEvent> |
getOnFailed()
Task状態遷移がFAILED状態になるたびにonFailedイベント・ハンドラが呼び出されます。
|
EventHandler<WorkerStateEvent> |
getOnRunning()
Task状態遷移がRUNNING状態になるたびにonRunningイベント・ハンドラが呼び出されます。
|
EventHandler<WorkerStateEvent> |
getOnScheduled()
Task状態遷移がSCHEDULED状態になるたびにonScheduleイベント・ハンドラが呼び出されます。
|
EventHandler<WorkerStateEvent> |
getOnSucceeded()
Task状態遷移がSUCCEEDED状態になるたびにonSucceededイベント・ハンドラが呼び出されます。
|
double |
getProgress()
プロパティprogressの値を取得します。
|
Worker.State |
getState()
プロパティstateの値を取得します。
|
String |
getTitle()
プロパティtitleの値を取得します。
|
double |
getTotalWork()
プロパティtotalWorkの値を取得します。
|
V |
getValue()
プロパティvalueの値を取得します。
|
double |
getWorkDone()
プロパティworkDoneの値を取得します。
|
boolean |
isRunning()
プロパティrunningの値を取得します。
|
ReadOnlyStringProperty |
messageProperty()
メッセージを表すReadOnlyStringPropertyを取得します。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onCancelledProperty()
Task状態遷移がCANCELLED状態になるたびにonCancelledイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onFailedProperty()
Task状態遷移がFAILED状態になるたびにonFailedイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onRunningProperty()
Task状態遷移がRUNNING状態になるたびにonRunningイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onScheduledProperty()
Task状態遷移がSCHEDULED状態になるたびにonScheduleイベント・ハンドラが呼び出されます。
|
ObjectProperty<EventHandler<WorkerStateEvent>> |
onSucceededProperty()
Task状態遷移がSUCCEEDED状態になるたびにonSucceededイベント・ハンドラが呼び出されます。
|
ReadOnlyDoubleProperty |
progressProperty()
進捗を表すReadOnlyDoublePropertyを取得します。
|
<T extends Event> |
removeEventFilter(EventType<T> eventType, EventHandler<? super T> eventFilter)
以前に登録したイベント・フィルタをこのタスクから登録解除します。
|
<T extends Event> |
removeEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler)
以前に登録したイベント・ハンドラをこのタスクから登録解除します。
|
protected void |
running()
Taskの状態がRUNNING状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。
|
ReadOnlyBooleanProperty |
runningProperty()
Workerを実行しているかどうかを表すReadOnlyBooleanPropertyを取得します。
|
protected void |
scheduled()
Taskの状態がSCHEDULED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。
|
protected <T extends Event> |
setEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler)
このイベント・タイプに対して使用するハンドラを設定します。
|
void |
setOnCancelled(EventHandler<WorkerStateEvent> value)
Task状態遷移がCANCELLED状態になるたびにonCancelledイベント・ハンドラが呼び出されます。
|
void |
setOnFailed(EventHandler<WorkerStateEvent> value)
Task状態遷移がFAILED状態になるたびにonFailedイベント・ハンドラが呼び出されます。
|
void |
setOnRunning(EventHandler<WorkerStateEvent> value)
Task状態遷移がRUNNING状態になるたびにonRunningイベント・ハンドラが呼び出されます。
|
void |
setOnScheduled(EventHandler<WorkerStateEvent> value)
Task状態遷移がSCHEDULED状態になるたびにonScheduleイベント・ハンドラが呼び出されます。
|
void |
setOnSucceeded(EventHandler<WorkerStateEvent> value)
Task状態遷移がSUCCEEDED状態になるたびにonSucceededイベント・ハンドラが呼び出されます。
|
ReadOnlyObjectProperty<Worker.State> |
stateProperty()
現在の状態を表すReadOnlyObjectPropertyを取得します。
|
protected void |
succeeded()
Taskの状態がSUCCEEDED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。
|
ReadOnlyStringProperty |
titleProperty()
タイトルを表すReadOnlyStringPropertyを取得します。
|
ReadOnlyDoubleProperty |
totalWorkProperty()
実行する必要がある最大処理量を表すReadOnlyDoublePropertyを取得します。
|
protected void |
updateMessage(String message)
message プロパティを更新します。 |
protected void |
updateProgress(double workDone, double max)
workDone 、totalWork およびprogress プロパティを更新します。 |
protected void |
updateProgress(long workDone, long max)
workDone 、totalWork およびprogress プロパティを更新します。 |
protected void |
updateTitle(String title)
title プロパティを更新します。 |
protected void |
updateValue(V value)
value プロパティを更新します。 |
ReadOnlyObjectProperty<V> |
valueProperty()
値を表すReadOnlyObjectPropertyを取得します。
|
ReadOnlyDoubleProperty |
workDoneProperty()
現在の進捗を表すReadOnlyDoublePropertyを取得します。
|
done, get, get, isCancelled, isDone, run, runAndReset, set, setException
public final ReadOnlyObjectProperty<Worker.State> stateProperty
stateProperty
、インタフェース: Worker<V>
getState()
public final ObjectProperty<EventHandler<WorkerStateEvent>> onScheduledProperty
getOnScheduled()
, setOnScheduled(EventHandler)
public final ObjectProperty<EventHandler<WorkerStateEvent>> onRunningProperty
getOnRunning()
, setOnRunning(EventHandler)
public final ObjectProperty<EventHandler<WorkerStateEvent>> onSucceededProperty
getOnSucceeded()
, setOnSucceeded(EventHandler)
public final ObjectProperty<EventHandler<WorkerStateEvent>> onCancelledProperty
getOnCancelled()
, setOnCancelled(EventHandler)
public final ObjectProperty<EventHandler<WorkerStateEvent>> onFailedProperty
getOnFailed()
, setOnFailed(EventHandler)
public final ReadOnlyObjectProperty<V> valueProperty
valueProperty
、インタフェース: Worker<V>
getValue()
public final ReadOnlyObjectProperty<Throwable> exceptionProperty
exceptionProperty
、インタフェース: Worker<V>
getException()
public final ReadOnlyDoubleProperty workDoneProperty
workDoneProperty
、インタフェース: Worker<V>
getWorkDone()
public final ReadOnlyDoubleProperty totalWorkProperty
totalWorkProperty
、インタフェース: Worker<V>
getTotalWork()
public final ReadOnlyDoubleProperty progressProperty
progressProperty
、インタフェース: Worker<V>
getProgress()
public final ReadOnlyBooleanProperty runningProperty
runningProperty
、インタフェース: Worker<V>
isRunning()
public final ReadOnlyStringProperty messageProperty
messageProperty
、インタフェース: Worker<V>
getMessage()
public final ReadOnlyStringProperty titleProperty
titleProperty
、インタフェース: Worker<V>
getTitle()
protected abstract V call() throws Exception
Exception
- バックグラウンド操作中に発生した未処理の例外public final Worker.State getState()
public final ReadOnlyObjectProperty<Worker.State> stateProperty()
Worker
stateProperty
、インタフェース: Worker<V>
getState()
public final ObjectProperty<EventHandler<WorkerStateEvent>> onScheduledProperty()
getOnScheduled()
, setOnScheduled(EventHandler)
public final EventHandler<WorkerStateEvent> getOnScheduled()
public final void setOnScheduled(EventHandler<WorkerStateEvent> value)
value
- イベント・ハンドラ(nullにしてクリアすることが可能)protected void scheduled()
public final ObjectProperty<EventHandler<WorkerStateEvent>> onRunningProperty()
getOnRunning()
, setOnRunning(EventHandler)
public final EventHandler<WorkerStateEvent> getOnRunning()
public final void setOnRunning(EventHandler<WorkerStateEvent> value)
value
- イベント・ハンドラ(nullにしてクリアすることが可能)protected void running()
public final ObjectProperty<EventHandler<WorkerStateEvent>> onSucceededProperty()
getOnSucceeded()
, setOnSucceeded(EventHandler)
public final EventHandler<WorkerStateEvent> getOnSucceeded()
public final void setOnSucceeded(EventHandler<WorkerStateEvent> value)
value
- イベント・ハンドラ(nullにしてクリアすることが可能)protected void succeeded()
public final ObjectProperty<EventHandler<WorkerStateEvent>> onCancelledProperty()
getOnCancelled()
, setOnCancelled(EventHandler)
public final EventHandler<WorkerStateEvent> getOnCancelled()
public final void setOnCancelled(EventHandler<WorkerStateEvent> value)
value
- イベント・ハンドラ(nullにしてクリアすることが可能)protected void cancelled()
public final ObjectProperty<EventHandler<WorkerStateEvent>> onFailedProperty()
getOnFailed()
, setOnFailed(EventHandler)
public final EventHandler<WorkerStateEvent> getOnFailed()
public final void setOnFailed(EventHandler<WorkerStateEvent> value)
value
- イベント・ハンドラ(nullにしてクリアすることが可能)protected void failed()
public final V getValue()
public final ReadOnlyObjectProperty<V> valueProperty()
Worker
valueProperty
、インタフェース: Worker<V>
getValue()
public final Throwable getException()
getException
、インタフェース: Worker<V>
public final ReadOnlyObjectProperty<Throwable> exceptionProperty()
Worker
exceptionProperty
、インタフェース: Worker<V>
getException()
public final double getWorkDone()
getWorkDone
、インタフェース: Worker<V>
Worker.totalWorkProperty()
, Worker.progressProperty()
public final ReadOnlyDoubleProperty workDoneProperty()
Worker
workDoneProperty
、インタフェース: Worker<V>
getWorkDone()
public final double getTotalWork()
getTotalWork
、インタフェース: Worker<V>
Worker.workDoneProperty()
, Worker.progressProperty()
public final ReadOnlyDoubleProperty totalWorkProperty()
Worker
totalWorkProperty
、インタフェース: Worker<V>
getTotalWork()
public final double getProgress()
getProgress
、インタフェース: Worker<V>
Worker.workDoneProperty()
, Worker.totalWorkProperty()
public final ReadOnlyDoubleProperty progressProperty()
Worker
progressProperty
、インタフェース: Worker<V>
getProgress()
public final boolean isRunning()
public final ReadOnlyBooleanProperty runningProperty()
Worker
runningProperty
、インタフェース: Worker<V>
isRunning()
public final String getMessage()
getMessage
、インタフェース: Worker<V>
public final ReadOnlyStringProperty messageProperty()
Worker
messageProperty
、インタフェース: Worker<V>
getMessage()
public final String getTitle()
public final ReadOnlyStringProperty titleProperty()
Worker
titleProperty
、インタフェース: Worker<V>
getTitle()
public final boolean cancel()
Worker
public boolean cancel(boolean mayInterruptIfRunning)
protected void updateProgress(long workDone, long max)
workDone
、totalWork
およびprogress
プロパティを更新します。updateProgressの呼出しは結合されて後でFXアプリケーション・スレッドで実行され、updateProgressの呼出しはFXアプリケーション・スレッドからであっても必ずしもこれらのプロパティの即時更新にはならない場合があり、中間のworkDone値はイベント通知を軽減するために結合される場合があります。max
がtotalWork
の新しい値になります。
このメソッドは、任意のスレッドから安全に呼び出すことができます。
workDone
- Long.MIN_VALUEからmaxまでの値。値がmaxよりも大きい場合は、maxに固定されます。渡された値が負の場合は、結果の処理済割合は-1 (したがって、不確定)になります。max
- Long.MIN_VALUEからLong.MAX_VALUEまでの値。updateProgress(double, double)
protected void updateProgress(double workDone, double max)
workDone
、totalWork
およびprogress
プロパティを更新します。updateProgressの呼出しは結合されて後でFXアプリケーション・スレッドで実行され、updateProgressの呼出しはFXアプリケーション・スレッドからであっても必ずしもこれらのプロパティの即時更新にはならない場合があり、中間のworkDone値はイベント通知を軽減するために結合される場合があります。max
がtotalWork
の新しい値になります。
このメソッドは、任意のスレッドから安全に呼び出すことができます。
workDone
- Double.MIN_VALUEからmaxまでの値。値がmaxよりも大きい場合は、maxに固定されます。渡された値が負または無限またはNaNの場合は、結果のpercentDoneは-1 (したがって、不確定)になります。max
- Double.MIN_VALUEからDouble.MAX_VALUEまでの値。無限およびNaNは、-1として処理されます。protected void updateMessage(String message)
message
プロパティを更新します。updateMessageの呼出しは結合されて後でFXアプリケーション・スレッドで実行されるため、updateMessageの呼出しはFXアプリケーション・スレッドからであっても必ずしもこのプロパティの即時更新にはならない場合があり、中間のmessage値はイベント通知を軽減するために結合される場合があります。
このメソッドは、任意のスレッドから安全に呼び出すことができます。
message
- 新しいメッセージprotected void updateTitle(String title)
title
プロパティを更新します。updateTitleの呼出しは結合されて後でFXアプリケーション・スレッドで実行されるため、updateTitleの呼出しはFXアプリケーション・スレッドからであっても必ずしもこのプロパティの即時更新にはならない場合があり、中間のtitle値はイベント通知を軽減するために結合される場合があります。
このメソッドは、任意のスレッドから安全に呼び出すことができます。
title
- 新しいタイトルprotected void updateValue(V value)
value
プロパティを更新します。updateValueの呼出しは結合されて後でFXアプリケーション・スレッドで実行されるため、updateValueの呼出しはFXアプリケーション・スレッドからであっても必ずしもこのプロパティの即時更新にはならない場合があり、中間値はイベント通知を軽減するために結合される場合があります。
このメソッドは、任意のスレッドから安全に呼び出すことができます。
value
- 新しい値public final <T extends Event> void addEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler)
T
- ハンドラの特定のイベント・クラスeventType
- ハンドラによって受け取る特定のイベントのタイプeventHandler
- 登録するハンドラNullPointerException
- イベント・タイプまたはハンドラがnullの場合public final <T extends Event> void removeEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler)
T
- ハンドラの特定のイベント・クラスeventType
- 登録解除する対象のイベント・タイプeventHandler
- 登録解除するハンドラNullPointerException
- イベント・タイプまたはハンドラがnullの場合public final <T extends Event> void addEventFilter(EventType<T> eventType, EventHandler<? super T> eventFilter)
T
- フィルタの特定のイベント・クラスeventType
- フィルタによって受け取る特定のイベントのタイプeventFilter
- 登録するフィルタNullPointerException
- イベント・タイプまたはフィルタがnullの場合public final <T extends Event> void removeEventFilter(EventType<T> eventType, EventHandler<? super T> eventFilter)
T
- フィルタの特定のイベント・クラスeventType
- 登録解除する対象のイベント・タイプeventFilter
- 登録解除するフィルタNullPointerException
- イベント・タイプまたはフィルタがnullの場合protected final <T extends Event> void setEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler)
T
- ハンドラの特定のイベント・クラスeventType
- 特定のeventHandlerと関連付けるイベント・タイプeventHandler
- 登録するハンドラ、または登録解除する場合はnullNullPointerException
- イベント・タイプがnullの場合public final void fireEvent(Event event)
このメソッドは、FXユーザー・スレッドで呼び出す必要があります。
event
- 起動するイベントpublic EventDispatchChain buildEventDispatchChain(EventDispatchChain tail)
EventTarget
EventTarget
を対象にしたイベントの処理に関係する可能性があるイベント・ディスパッチャが含まれます。このイベント・ターゲットはチェーンに自動的には追加されないため、これがイベントを処理する場合は、それ自体のEventDispatcher
をチェーンに追加する必要があります。
イベント・ターゲットが階層の一部である場合、そのチェーンは通常、階層のルートからイベント・ターゲットまでの収集されたイベント・ディスパッチャから作成されます。
イベント・ディスパッチ・チェーンは、提供される初期イベント・ディスパッチ・チェーンに対する変更によって構築されます。返されるチェーンでは初期チェーンが最後にある必要があるため、ディスパッチャは初期チェーンの前に追加される必要があります。
呼出し元は、初期チェーンが変更されないままであることや、返される値によって異なるチェーンが参照されることを想定できません。
buildEventDispatchChain
、インタフェース: EventTarget
tail
- 作成元の初期チェーンCopyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.