質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Javadoc

Javadocは、Java言語で記述されたクラスライブラリ、及びアプリケーションについてのパッケージ・クラス・メソッドのHTML形式のAPI仕様書のことを指します。ドキュメント更新の漏れを減らすことができ、最新の状態を把握することが可能になります。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

4383閲覧

TimelineクラスとTimerTaskクラスの違い

uzuura

総合スコア10

Javadoc

Javadocは、Java言語で記述されたクラスライブラリ、及びアプリケーションについてのパッケージ・クラス・メソッドのHTML形式のAPI仕様書のことを指します。ドキュメント更新の漏れを減らすことができ、最新の状態を把握することが可能になります。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/07/26 13:16

JavaFXです。TimerlineクラスとTimerTaskクラスは、それぞれどのような特徴を持っているのでしょうか。どちらのクラスも同じようなループをしているように感じるのですが…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一定時間ごとに何かをするためのクラスという大まかな意味では「同じようなループをしている」というように見えるかも知れませんが、きちんと機能を把握した上で実際にどのように使うかを考えてみれば全然違うものに見えると思います。

###java.util.TimerTask
APIリファレンスを見ると明らかですが、TimerTaskはそれ自身では待機時間の指定やループなど「時間に対する処理をスケジュールする機能」は(cancelメソッドを除き)持っていません。スケジューリング機能はjava.util.Timerの方が担っています。
Timelineとの比較でいうと、java.util.Timer/java.util.TimerTaskはより汎用的・単純な機能となっています。それでできることは「任意のバックグラウンドスレッドにて時間の経過により起動される処理をスケジュールすることだけ」です。

###javafx.animation.Timeline
こちらはJavaFXの画面を構成する任意のNodeの任意の属性(JavaFXプロパティー)の値を任意のフレームレートでアニメーションさせるためのクラスであり、JavaFX特化クラスというべきものです。

Timer/TimerTaskに比べてTimelineの違いをいくつか列挙してみますと・・・

  • 補完

アニメーションをするための重要な機能としてTimelineの方にはKeyFrame/KeyValueにより時間経過に応じて画面が連続的に変化するように補完を行ってくれます。例えば1秒ごとに図形を100ピクセル移動させるといった場合、フレームレートを20と指定すると0.05秒ごとに5ピクセルずつ移動するような動きを自動的に行ってくれます。Timer/TimerTaskにはこうした機能はありません。

  • 処理が起動されるスレッド

TimelineはJavaFXの制御を行う目的で使うもののため、onFinishedHandlerなどはJavaFXアプリケーションスレッドで起動されるようになっています。対してTimer/TimerTaskはそれ専用のスレッドでハンドラーが起動します。

  • 時間の扱い

Timerは相対的な時間ベースで動作するようです。例えば0.1秒ごとにある処理をしようとするとき、なんらかの都合のため処理に遅延が発生した場合(例えばGCが発生した場合など)それ以降のTimerTask起動契機は絶対時間に対して遅れが生じます。
これに対してTimelineはなんらかの都合で途中に遅延が発生してもその遅延が蓄積するようなことはなく、あくまで絶対時間を基準にアニメーションされます。
例えば10秒ごとに図形が左->右->左というループアニメーションをしようとする場合、極端な話、Timer/TimerTaskで実現すると1000秒後には図形が初期状態(左端)にあるかどうかは保証されません。一方Timelineでは1000秒後には(若干の誤差を除けば)初期状態の位置にあることが保証されるようです。この時間の扱いの違いについてAPIリファレンスにははっきりと書いてないと思いますが、通常アニメーションをするときには音声や画像などを同期させたりする都合上、絶対時間ベースで動作してほしいと期待すると思います(そうでないとTimelineというクラス名は看板倒れということになってしまうと思います)。Timelineの実装を調べていくとそれが内部的に用いているMasterTimerというクラスのJava Docコメントにひそかに「絶対時間で動作する」と記述されていました。

投稿2017/07/29 09:19

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uzuura

2017/07/30 03:54

詳しく教えてくださって本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問