プロジェクト

全般

プロフィール

調査 #94

未完了

JavaFXのサードパーティ・ライブラリChartFXでスペクトラム表示

高橋 徹 さんがほぼ5年前に追加. ほぼ5年前に更新.

ステータス:
新規
優先度:
通常
担当者:
カテゴリ:
-
対象バージョン:
-
開始日:
2019/09/22
期日:
進捗率:

0%

予定工数:

説明

調査目的:JavaFX標準のLineChartは大量のデータを扱うのに不得手であり、科学技術分野向けに大量のデータを高速に描画できるとされるChartFXを試してみる。

調査結果:簡潔なスペクトラム表示プログラムを作成し1万点列のデータを表示し速度を評価する

完了条件:評価結果を書く

高橋 徹 さんがほぼ5年前に更新

  • 担当者高橋 徹 にセット

開発環境は次

  • IntelliJ IDEA Community Edition 2019.2
  • Oracle JDK 13 (OTNライセンス)
  • OpenJFX 13
  • ChartFX 11

高橋 徹 さんがほぼ5年前に更新

IntelliJ IDEAでGradleプロジェクトを作成

  • [File]メニュー > [New] > [Project...] で「New Project」画面を開く
  • 左側ペインで[Gradle]を選択、右側ペインで[Java]にチェック、Project SDK欄は[Oracle JDK 13]を選択
  • [Next]ボタンをクリックし、次の遷移画面で[ArtifactId]にjarファイル名(プログラムの名を表す命名とする)として[spectrum_viewer]を記載、[Version]にプログラムのバージョン名として[0.1.0]を記載
  • [Next]ボタンを押し、次の遷移画面で[Project location]欄に開発するディレクトリを記載、[Finish]ボタンをクリック

build.gradleファイルを編集

  • gradleのプラグインに、Javaアプリケーション、JavaFX開発を指定
      plugins {
    -     id 'java'
    +     id 'application'
    +     id 'org.openjfx.javafxplugin' version '0.0.8'
      }
    
    • 標準のjavaプラグインでは、gradleタスクとしてbuild、jarはあるがrunがないのでapplicationプラグインを使用
    • JavaFXを利用するのにjavafxプラグインが便利(OpenJFXのドキュメントに解説した)
  • メインクラスを定義
    + mainClassName = 'com.torutk.spectrum.SpectrumViewApp'
    
    • applicationプラグインで追加されるrunタスクで実行するメインクラスを定義
  • JavaFX開発のプラグイン設定を追記
    + javafx {
    +     version = "13" 
    +     modules = [ 'javafx.controls', 'javafx.fxml' ]
    + }
    

JavaFXのアプリケーション派生クラス(プログラムのエントリポイント)を作成

  • 左側ペイン(Project)でsrc\mainの下の[java]を選択し、右クリックでポップアップメニューから[New] > [Java Class]を選択、「New Java Class」画面で[Class]を選択状態とし、クラス名を記載する。ここでは、[com.torutk.spectrum.view.SpectrumViewApp]と入力した。パッケージcom.torutk.spectrum.viewが自動で追加され、その中にSpectrumViewAppクラスのソースファイルが生成される。
  • クラス宣言に、extends Applicationを追記する

この時点では、JavaFXのライブラリが認識されていない。
BuildペインまたはGradleペインのぐるぐるアイコン(Reimport Gradle Project)をクリックする。

高橋 徹 さんがほぼ5年前に更新

ChartFXの導入

build.gradleの記述で、dependenciesに compile, testCompile, runtime といった記述は非推奨(Deprecated)らしい。今は、implementation, testImplementation といった記述をする。

dependencies {
    implementation 'de.gsi.chart:chartfx-chart:11.0.3'
}

高橋 徹 さんがほぼ5年前に更新

JUnit 5を使うためのbuild.gradle記述は

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
}

test {
    useJUnitPlatform()
}

高橋 徹 さんがほぼ5年前に更新

Gradleプロジェクトのソースコードのバージョンがデフォルトでは8だったので13に変更する

  • build.gradle
    - sourceCompatibility = 1.8
    + sourceCompatibility = 13
    

IntelliJ IDEAの[File]メニュー > [Project Structure...] で、左側ペインでProjectを選択、Project language levelは13となっているが、Gradleプロジェクトの場合はここではなくbuild.gradleファイルに定義しないとダメみたい。

ビルドしたところ、エラー発生

Could not target platform: 'Java SE 13' using tool chain: 'JDK 11 (11)'.

解決方法
  • 「Settings」画面を開き、左側ペインで[Build, Execution, Deployment] > [Build Tools] > [Gradle]を選択、右側ペインで[Gradle JVM]欄をJDK 13に設定する

高橋 徹 さんがほぼ5年前に更新

ビルドと実行はできたが、デバッグ実行でエラー発生

FAILURE: Build failed with an exception.

* Where:
Initialization script 'C:\Users\toru\AppData\Local\Temp\ijresolvers1.gradle'

* What went wrong:
Could not compile initialization script 'C:\Users\toru\AppData\Local\Temp\ijresolvers1.gradle'.
> startup failed:
  General error during semantic analysis: Unsupported class file major version 57

Gradleのバグレポートに該当すると思われる件あり
https://github.com/gradle/gradle/issues/8681

現在のところ、次の状況
  • IntelliJ IDEA 2019.2に搭載されるGradleは5.2.1であり、JDK 13には対応していない。
  • JDK 13に対応するGradleは今後のリリース(6.0)

他の形式にエクスポート: Atom PDF