我有JavaFX应用程序,我想从静态Java方法调用此代码。
Image icon = new Image(getClass().getResource("/images/system-help.png").toExternalForm());
但是我收到了这条警告信息:
non-static method getClass() cannot be referenced from a static context
你能告诉我重写这段代码以便将它用于静态方法的正确方法是什么?
答案 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"))