如何从静态方法加载图像

时间:2013-07-03 17:32:01

标签: java

我有JavaFX应用程序,我想从静态Java方法调用此代码。

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

但是我收到了这条警告信息:

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

你能告诉我重写这段代码以便将它用于静态方法的正确方法是什么?

3 个答案:

答案 0 :(得分:9)

建议之词=>不要这样做。

一般来说,Jeffery的回答提供了初始化静态资源的方法,但是将它应用于加载JavaFX Image可能不是一个好主意。

由于RT-30796 Cannot create a JavaFX Image until "Internal graphics" are initialized,建议不要尝试在静态上下文中创建JavaFX映像。

在初始化JavaFX内部图形引擎之前,RT-30796中阻止在静态上下文中加载JavaFX映像的问题可能会在未来的JavaFX版本中得到解决。 (查看问题跟踪器需要注册,但任何人都可以注册查看它。)

相反,我建议您修改应用程序逻辑,以便在确定已为应用程序正确初始化JavaFX工具包后,在非静态上下文中创建映像(例如,一旦调用了应用程序的init或start方法或者你的JFXPanel创建了。)

此外,为了加载JavaFX图像,我不建议使用ImageIO。 ImageIO会创建AWT图像,然后您需要将其转换为JavaFX图像。使用JavaFX Image构造函数是一种更直接的途径,可以在AWT和ImageIO可能无法使用的嵌入式平台上的紧凑Java配置文件上运行。

答案 1 :(得分:6)

在静态上下文中访问类的方法是使用封闭类中的类文字。

例如:

public class Foo {
    private static final Image icon;
    static {
        icon = new Image(Foo.class.getResource(...));
    }
}

答案 2 :(得分:4)

使用

MyClass.class.getResource

或尝试:

ImageIO.read(new File("/images/system-help.png"))