モジュール javafx.graphics
パッケージ javafx.concurrent

クラスService<V>

  • 型パラメータ:
    V - サービスによって返されるオブジェクトの型
    すべての実装されたインタフェース:
    Worker<V>, EventTarget
    直系の既知のサブクラス:
    ScheduledService

    public abstract class Service<V>
    extends Object
    implements Worker<V>, EventTarget

    Serviceは、1つ以上のバックグラウンド・スレッドで処理を実行するために必要な情報をカプセル化する非ビジュアル・コンポーネントです。 JavaFX UIライブラリの一部として、ServiceはJavaFXアプリケーション・スレッドを認識し、ユーザー・インタフェースとやり取りするマルチスレッド・コードを管理する負荷からアプリケーション開発者を解放するように設計されています。 このため、Serviceのすべてのメソッドおよび状態は、JavaFXアプリケーション・スレッドからのみ呼び出されることが意図されています。 これに対する例外は、Serviceを最初に構成する場合とServiceを最初に起動する場合であり、これらは任意のスレッドから安全に実行できます。 ただし、Serviceが初期化および起動されると、以降はFXスレッドからのみ使用できます。

    Serviceは、バックグラウンド・スレッドで処理を実行するTaskを作成および管理します。 ServiceはWorkerを実装します。 このため、バックグラウンド・タスク操作の状態を監視し、必要に応じてそれを取り消すことができます。 Serviceは再利用可能なWorkerであり、リセットおよび再起動できます。 このため、Serviceは宣言的に構成し、必要に応じて再起動できます。 Serviceが起動すると、Taskをスケジュールし、Taskの状態の変化をリスニングします。 Taskは、Serviceを開始した参照を保留することはなく、つまり、Taskの実行はServiceが不要データの収集を実行するのを妨げません。

    Serviceに対してExecutorが指定された場合、これはサービスを実際に実行するために使用されます。 それ以外の場合は、デーモン・スレッドが作成および実行されます。 デーモン以外のスレッドを作成する場合は、カスタムExecutorを指定します(たとえば、カスタムThreadFactoryを持つThreadPoolExecutorを使用できます)。

    Serviceの目的は宣言的なユースケースを簡素化することであるため、サブクラスは実行する処理に対して入力パラメータをプロパティとして公開する必要があります。 たとえば、任意のURLから最初の行を読み取り、それを文字列として返すServiceを記述するとします。 そのようなServiceは、単一のプロパティurlを持つように定義される場合があります。 次のように実装される場合があります。

    
         public static class FirstLineService extends Service<String> {
             private StringProperty url = new SimpleStringProperty(this, "url");
             public final void setUrl(String value) { url.set(value); }
             public final String getUrl() { return url.get(); }
             public final StringProperty urlProperty() { return url; }
    
             protected Task createTask() {
                 final String _url = getUrl();
                 return new Task<String>() {
                     protected String call() throws Exception {
                         URL u = new URL(_url);
                         BufferedReader in = new BufferedReader(
                                 new InputStreamReader(u.openStream()));
                         String result = in.readLine();
                         in.close();
                         return result;
                     }
                 };
             }
         }
         

    Serviceは、デフォルトで、未指定のデフォルトまたは最大スレッド・プール・サイズを持つスレッド・プールExecutorを使用します。 これは、稚拙なコードによって数千のスレッドが作成されてシステムが完全に過負荷にならないようにするために行われます。

    導入されたバージョン:
    JavaFX 2.0
    • コンストラクタの詳細

      • Service

        protected Service()
        新しいServiceを作成します。
    • メソッドの詳細

      • totalWorkProperty

        public final ReadOnlyDoubleProperty totalWorkProperty()
        次のインタフェースからコピーされた説明: Worker
        実行する必要がある最大処理量を表すReadOnlyDoublePropertyを取得します。 これらの処理単位は、ダウンロードする必要があるバイト数や処理するイメージ数、その他のこのようなメトリックなど、Worker実装にとって意味を持ちます。
        定義:
        totalWorkProperty 、インタフェース: Worker<V>
        関連項目:
        Worker.getTotalWork()
      • setExecutor

        public final void setExecutor​(Executor value)
        プロパティexecutorの値を設定します。
        プロパティの説明:
        このServiceを実行するために使用する実行者。 実行者が指定されない場合、新しいデーモン・スレッドが作成され、デフォルトの実行者を使用したServiceの実行に使用されます。
      • getExecutor

        public final Executor getExecutor()
        プロパティexecutorの値を取得します。
        プロパティの説明:
        このServiceを実行するために使用する実行者。 実行者が指定されない場合、新しいデーモン・スレッドが作成され、デフォルトの実行者を使用したServiceの実行に使用されます。
      • executorProperty

        public final ObjectProperty<Executor> executorProperty()
        このServiceを実行するために使用する実行者。 実行者が指定されない場合、新しいデーモン・スレッドが作成され、デフォルトの実行者を使用したServiceの実行に使用されます。
        関連項目:
        getExecutor(), setExecutor(Executor)
      • getOnReady

        public final EventHandler<WorkerStateEvent> getOnReady()
        Task状態遷移がREADY状態になるたびにonReadyイベント・ハンドラが呼び出されます。
        戻り値:
        onReadyイベント・ハンドラ(存在する場合)
        導入されたバージョン:
        JavaFX 2.1
      • setOnReady

        public final void setOnReady​(EventHandler<WorkerStateEvent> value)
        Task状態遷移がREADY状態になるたびにonReadyイベント・ハンドラが呼び出されます。
        パラメータ:
        value - イベント・ハンドラ(nullにしてクリアすることが可能)
        導入されたバージョン:
        JavaFX 2.1
      • ready

        protected void ready()
        Serviceの状態がREADY状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。
        導入されたバージョン:
        JavaFX 2.1
      • getOnScheduled

        public final EventHandler<WorkerStateEvent> getOnScheduled()
        Task状態遷移がSCHEDULED状態になるたびにonScheduleイベント・ハンドラが呼び出されます。
        戻り値:
        onScheduledイベント・ハンドラ(存在する場合)
        導入されたバージョン:
        JavaFX 2.1
      • setOnScheduled

        public final void setOnScheduled​(EventHandler<WorkerStateEvent> value)
        Task状態遷移がSCHEDULED状態になるたびにonScheduleイベント・ハンドラが呼び出されます。
        パラメータ:
        value - イベント・ハンドラ(nullにしてクリアすることが可能)
        導入されたバージョン:
        JavaFX 2.1
      • scheduled

        protected void scheduled()
        Serviceの状態がSCHEDULED状態に遷移するたびに呼び出される、protectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。
        導入されたバージョン:
        JavaFX 2.1
      • getOnRunning

        public final EventHandler<WorkerStateEvent> getOnRunning()
        Task状態遷移がRUNNING状態になるたびにonRunningイベント・ハンドラが呼び出されます。
        戻り値:
        onRunningイベント・ハンドラ(存在する場合)
        導入されたバージョン:
        JavaFX 2.1
      • setOnRunning

        public final void setOnRunning​(EventHandler<WorkerStateEvent> value)
        Task状態遷移がRUNNING状態になるたびにonRunningイベント・ハンドラが呼び出されます。
        パラメータ:
        value - イベント・ハンドラ(nullにしてクリアすることが可能)
        導入されたバージョン:
        JavaFX 2.1
      • running

        protected void running()
        Serviceの状態がRUNNING状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。
        導入されたバージョン:
        JavaFX 2.1
      • getOnSucceeded

        public final EventHandler<WorkerStateEvent> getOnSucceeded()
        Task状態遷移がSUCCEEDED状態になるたびにonSucceededイベント・ハンドラが呼び出されます。
        戻り値:
        onSucceededイベント・ハンドラ(存在する場合)
        導入されたバージョン:
        JavaFX 2.1
      • setOnSucceeded

        public final void setOnSucceeded​(EventHandler<WorkerStateEvent> value)
        Task状態遷移がSUCCEEDED状態になるたびにonSucceededイベント・ハンドラが呼び出されます。
        パラメータ:
        value - イベント・ハンドラ(nullにしてクリアすることが可能)
        導入されたバージョン:
        JavaFX 2.1
      • succeeded

        protected void succeeded()
        Serviceの状態がSUCCEEDED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。
        導入されたバージョン:
        JavaFX 2.1
      • getOnCancelled

        public final EventHandler<WorkerStateEvent> getOnCancelled()
        Task状態遷移がCANCELLED状態になるたびにonCancelledイベント・ハンドラが呼び出されます。
        戻り値:
        onCancelledイベント・ハンドラ(存在する場合)
        導入されたバージョン:
        JavaFX 2.1
      • setOnCancelled

        public final void setOnCancelled​(EventHandler<WorkerStateEvent> value)
        Task状態遷移がCANCELLED状態になるたびにonCancelledイベント・ハンドラが呼び出されます。
        パラメータ:
        value - イベント・ハンドラ(nullにしてクリアすることが可能)
        導入されたバージョン:
        JavaFX 2.1
      • cancelled

        protected void cancelled()
        Serviceの状態がCANCELLED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。
        導入されたバージョン:
        JavaFX 2.1
      • getOnFailed

        public final EventHandler<WorkerStateEvent> getOnFailed()
        Task状態遷移がFAILED状態になるたびにonFailedイベント・ハンドラが呼び出されます。
        戻り値:
        onFailedイベント・ハンドラ(存在する場合)
        導入されたバージョン:
        JavaFX 2.1
      • setOnFailed

        public final void setOnFailed​(EventHandler<WorkerStateEvent> value)
        Task状態遷移がFAILED状態になるたびにonFailedイベント・ハンドラが呼び出されます。
        パラメータ:
        value - イベント・ハンドラ(nullにしてクリアすることが可能)
        導入されたバージョン:
        JavaFX 2.1
      • failed

        protected void failed()
        Serviceの状態がFAILED状態に遷移するたびに呼び出される、サブクラスのprotectedコンビニエンス・メソッド。 このメソッドは、Serviceが新しい状態に完全に遷移した後に呼び出されます。
        導入されたバージョン:
        JavaFX 2.1
      • cancel

        public boolean cancel()
        現在実行中のタスクを取り消します(存在する場合)。 状態はCANCELLEDに設定されます。
        定義:
        cancel 、インタフェース: Worker<V>
        戻り値:
        取消しが成功だった場合、trueを返します。
      • restart

        public void restart()
        現在実行中のタスクを取り消し(存在する場合)、このServiceを再起動します。 実行前に状態はREADYにリセットされます。 このメソッドは、FXアプリケーション・スレッドでのみ呼び出す必要があります。
      • reset

        public void reset()
        Serviceをリセットします。 終了状態(SUCCEEDED、FAILEDまたはCANCELLED)のいずれかのとき、またはREADYのときにのみ呼び出すことができます。 このメソッドは、FXアプリケーション・スレッドでのみ呼び出す必要があります。
      • start

        public void start()
        このServiceを起動します。 この呼出しに成功するには、ServiceはREADY状態である必要があります。 このメソッドは、FXアプリケーション・スレッドでのみ呼び出す必要があります。
      • executeTask

        protected void executeTask​(Task<V> task)

        このServiceに対して定義されたexecutorを使用して、指定されたタスクを実行します。 executorがnullの場合、このタスクを実行する新しいデーモン・スレッドを作成するデフォルトの実行者が使用されます。

        このメソッドは、Service実装による呼出しのみが意図されています。

        パラメータ:
        task - 実行するnull以外のタスク
        導入されたバージョン:
        JavaFX 2.1
      • addEventHandler

        public final <T extends Event> void addEventHandler​(EventType<T> eventType,
                                                            EventHandler<? super T> eventHandler)
        このタスクにイベント・ハンドラを登録します。 イベント・フィルタが最初に処理されてから、指定されたonFooイベント・ハンドラ、最後にこのメソッドによって登録されたイベント・ハンドラが処理されます。 シーン・グラフの他のイベントと同様に、イベントが使用されると、ディスパッチは続行されなくなります。
        型パラメータ:
        T - ハンドラの特定のイベント・クラス
        パラメータ:
        eventType - ハンドラが受け取るイベントのタイプ
        eventHandler - 登録するハンドラ
        例外:
        NullPointerException - イベント・タイプまたはハンドラがnullの場合
        導入されたバージョン:
        JavaFX 2.1
      • removeEventHandler

        public final <T extends Event> void removeEventHandler​(EventType<T> eventType,
                                                               EventHandler<? super T> eventHandler)
        以前に登録したイベント・ハンドラをこのタスクから登録解除します。 1つのハンドラが複数の異なるイベント・タイプに登録されているため、呼出し元はハンドラを登録解除する特定のイベント・タイプを指定する必要があります。
        型パラメータ:
        T - ハンドラの特定のイベント・クラス
        パラメータ:
        eventType - 登録解除するイベント・タイプ
        eventHandler - 登録解除するハンドラ
        例外:
        NullPointerException - イベント・タイプまたはハンドラがnullの場合
        導入されたバージョン:
        JavaFX 2.1
      • addEventFilter

        public final <T extends Event> void addEventFilter​(EventType<T> eventType,
                                                           EventHandler<? super T> eventFilter)
        このタスクにイベント・フィルタを登録します。 登録されたイベント・フィルタは、関連付けられたイベント・ハンドラよりも前にイベントを取得します。
        型パラメータ:
        T - フィルタの特定のイベント・クラス
        パラメータ:
        eventType - フィルタが受け取るイベントのタイプ
        eventFilter - 登録するフィルタ
        例外:
        NullPointerException - イベント・タイプまたはフィルタがnullの場合
        導入されたバージョン:
        JavaFX 2.1
      • removeEventFilter

        public final <T extends Event> void removeEventFilter​(EventType<T> eventType,
                                                              EventHandler<? super T> eventFilter)
        以前に登録したイベント・フィルタをこのタスクから登録解除します。 1つのフィルタが複数の異なるイベント・タイプに登録されているため、呼出し元はフィルタを登録解除する特定のイベント・タイプを指定する必要があります。
        型パラメータ:
        T - フィルタの特定のイベント・クラス
        パラメータ:
        eventType - 登録解除するイベント・タイプ
        eventFilter - 登録解除するフィルタ
        例外:
        NullPointerException - イベント・タイプまたはフィルタがnullの場合
        導入されたバージョン:
        JavaFX 2.1
      • setEventHandler

        protected final <T extends Event> void setEventHandler​(EventType<T> eventType,
                                                               EventHandler<? super T> eventHandler)
        このイベント・タイプに使用するハンドラを設定します。 一度に指定できるそのようなハンドラは1つのみです。 このハンドラは、最初に呼び出されることが保証されます。 これは、ユーザー定義のonFooイベント・ハンドラを登録するために使用されます。
        型パラメータ:
        T - ハンドラの特定のイベント・クラス
        パラメータ:
        eventType - 指定のeventHandlerに関連付けるイベント・タイプ
        eventHandler - 登録するハンドラ、または登録解除する場合はnull
        例外:
        NullPointerException - イベント・タイプがnullの場合
        導入されたバージョン:
        JavaFX 2.1
      • fireEvent

        protected final void fireEvent​(Event event)
        指定したイベントを起動します。 検出されたイベント・フィルタに通知され、イベント・フィルタはイベントを使用できます。 フィルタが使用しない場合は、このタスクのイベント・ハンドラに通知されます。 これらもイベントを使用しない場合は、すべてのイベント・ハンドラが呼び出されてイベントを使用できます。

        このメソッドは、FXユーザー・スレッドで呼び出される必要があります。

        パラメータ:
        event - 起動するイベント
        導入されたバージョン:
        JavaFX 2.1
      • createTask

        protected abstract Task<V> createTask()
        ServiceがJavaFXアプリケーション・スレッドで起動された後に呼び出されます。 Taskのバックグラウンド・スレッド・コード内でServiceで定義されたプロパティにアクセスすると例外になるため、実装ではTaskを作成する前に状態をfinal変数に保存する必要があります。 次に例を示します。
        
             protected Task createTask() {
                 final String url = myService.getUrl();
                 return new Task<String>() {
                     protected String call() {
                         URL u = new URL("http://www.oracle.com");
                         BufferedReader in = new BufferedReader(
                                 new InputStreamReader(u.openStream()));
                         String result = in.readLine();
                         in.close();
                         return result;
                     }
                 }
             }
         

        Taskが(匿名クラスではなく)事前定義済クラスである場合、および推奨されるベストプラクティスに従った場合、その状態はそのコンストラクタで完全に提供されるため、Taskを構築する前に状態を保存する必要はありません。

        
             protected Task createTask() {
                 // This is safe because getUrl is called on the FX Application
                 // Thread and the FirstLineReaderTasks stores it as an
                 // immutable property
                 return new FirstLineReaderTask(myService.getUrl());
             }
         
        戻り値:
        実行するTask