2

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

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" is initialized,不建议尝试在静态上下文中创建 JavaFX 图像。

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

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

此外,对于加载 JavaFX 图像,我不建议使用 ImageIO。ImageIO 创建 AWT 图像,然后您需要将其转换为 JavaFX 图像。使用 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 回答