JavaFX は、リッチで最新のユーザー インターフェイスを簡単に作成できる Java プログラミング言語用のグラフィカル ユーザー インターフェイス ツールキットです。実際の開発では、JavaFX イメージをロードしてデータベースに保存する必要がある場合があります。この記事では、その方法を紹介し、シンプルでわかりやすい手順でこの問題を解決するのに役立ちます。一緒に話し合ってみましょう!
現在、小さな画像をデータベースに保存し、javafx.scene.image.Imageとして使用するためにロードしようとしています。私が試したいくつかの解決策には、SwingFXUtils.fromFXImage と SwingFXUtils.toFxImage の使用が含まれていますが、そのクラスには、私が使用しようとしてさえいない module-info.java ファイル内のエントリが必要のようです。
SwingFXUtils を使用しようとしたときに次の例外が発生しました: java.lang.NoClassDefFoundError: javafx/embed/swing/SwingFXUtils
。
モジュール システムを使用すると、使用していた別のライブラリ (itextpdf) が壊れてしまいました。 したがって、これを回避し、データベースからJavaFXイメージを保存およびロードする別の方法を見つけたいと思います。 助言がありますか?
あなたが言及した内容:
###本当じゃない。 javafx は のみが名前付きモジュール 1 としての ロードをサポートしていますが、javafx では独自のコード がモジュール化されている必要はありません。 noclassdeffounderror を取得する唯一の方法は、実行時にモジュール パス/クラスパスにクラスを含めないことです (コンパイル時に存在する必要があります。そうしないとコードはコンパイルされません)。主要な Java IDE やビルド ツールの 1 つを使用して基本的な javafx アプリケーションをセットアップする方法を学ぶには、JavaFX 入門
を読むことをお勧めします。ただし、プロジェクトをどのように構成して実行するかが分からなければ、セットアップの何が問題なのかを正確に伝えることはできません。
つまり、あなたが達成したい全体的な目標は確かに実現可能です。以下は、コンピュータ上の画像を参照して、メモリ内の h2 データベースに保存できるようにする例です。イメージの ID と名前は、メモリ内データベースからロードされたイメージを表示できる「開く」ボタンのある列を含む
に入れられます。画像は、元の形式に関係なく、png 形式の blob としてデータベースに保存されます。 swingfxutils
クラスと imageio
クラスは、javafx イメージを png "ファイル" 2 に変換するために使用されます。
この例では、アプリケーションをデプロイする方法 (たとえば、
経由) は示されていません。
###バージョン###
以下は、サンプルの構築と実行に使用したライブラリとツールのバージョンです。
java 21.0.1 (Eclipse Adoptium/temurin)
2 あなたは gradle を使用していると述べたので、この例で使用しているのは次のとおりです。グラドル。 ###ソースコード### module-info.java ファイルがありません。
リーリー
main.java
リーリー imagerepository.java
リーリー imagesdatabase.java
リーリー gradle ファイル
私は kotlin DSL を使用しましたが、必要に応じて groovy DSL を使用することもできます。settings.gradle.kts
build.gradle.kts
リーリー ###埋め込む### 次のコマンドを使用して上記を実行できます: リーリー
注./gradlew は Gradle Wrapper
を呼び出します。マシンに gradle のバージョンがインストールされている場合は、次のようにしてバージョン 8.4 のラッパーを生成できます。 リーリー1.
javafx は、クラスパスからのロードを技術的にサポートしていません。これは、理想的には、独自のコードや他の依存関係がクラスパスからロードされる場合でも、javafx モジュールがモジュール パス上にあり、名前付きモジュールに解決される必要があることを意味します。ただし、メインクラスがjavafx.application のサブクラスになれないことを除いて、javafx がクラスパス上にある場合 (少なくとも javafx 21 の時点では) Breaking
がどうなるかはわかりません。 。 application (メインクラスとして別の「ランチャークラス」が必要です)。クラスパス上にある javafx によって引き起こされる問題は、javafx チームによって修正される可能性が低いことに注意してください。
openjfx によって提供される gradle および maven プラグインは、モジュール パスに javafx を配置するようにこれらのビルド ツールを構成することに注意してください。 2. 両方の質問のコンテキストに基づいて、この例では image
オブジェクトを png バイトに変換します。ただし、画像をすでにバイトとして (つまり、ローカル ファイルまたはリモート ファイルとして) 受信している場合は、それらのバイトをデータベースに直接入力する方が簡単で効率的です。
以上がJavaFX イメージをロードし、データベースに保存します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。