2

静的Javaメソッドからこのコードを呼び出したいJavaFXアプリケーションがあります。

Image icon = new Image(getClass().getResource("/images/system-help.png").toExternalForm());

しかし、次の警告メッセージが表示されます。

non-static method getClass() cannot be referenced from a static context

このコードを静的メソッドで使用するために書き直す適切な方法を教えてください。

4

3 に答える 3

11

アドバイス=>これをしないでください。

一般に、Jeffery の回答は静的リソースを初期化するためのレシピを提供しますが、それを JavaFX イメージのロードに適用することはお勧めできません。

RT- 30796 Cannot create a JavaFX Image until "Internal graphics" are initializedのため、静的コンテキストで JavaFX イメージを作成することはお勧めしません。

JavaFX 内部グラフィックエンジンが初期化される前に静的コンテキストで JavaFX イメージのロードを妨げる RT-30796 の問題は、JavaFX の将来のバージョンで対処される場合とされない場合があります。(Issue Tracker を表示するにはサインアップが必要ですが、誰でもサインアップして表示できます)。

代わりに、JavaFX ツールキットがアプリケーションに対して適切に初期化されていることを確認したら (たとえば、アプリケーションの init メソッドまたは start メソッドが呼び出された後、または JFXPanel が呼び出された後)、非静的コンテキストでイメージを作成するようにアプリケーションロジックを変更することをお勧めします作成した)。

さらに、JavaFX イメージをロードするために、ImageIO を使用することはお勧めしません。ImageIO は、JavaFX イメージに変換する必要がある AWT イメージを作成します。JavaFX Image コンストラクターの使用は、より直接的な方法であり、AWT および ImageIO が使用できない可能性がある組み込みプラットフォーム上のコンパクトな Java プロファイルで機能します。

于 2013-07-03T18:15:45.960 に答える
7

静的コンテキストでクラスにアクセスする方法は、囲んでいるクラスのクラス リテラルを使用することです。

元:

public class Foo {
    private static final Image icon;
    static {
        icon = new Image(Foo.class.getResource(...));
    }
}
于 2013-07-03T17:34:00.930 に答える
4

使用する

MyClass.class.getResource

または試してください:

ImageIO.read(new File("/images/system-help.png"))
于 2013-07-03T17:35:07.353 に答える