我有 JavaFX 应用程序,我想从静态 Java 方法调用此代码。
Image icon = new Image(getClass().getResource("/images/system-help.png").toExternalForm());
但我收到此警告消息:
non-static method getClass() cannot be referenced from a static context
您能告诉我重写此代码以便将其用于静态方法的正确方法是什么吗?
我有 JavaFX 应用程序,我想从静态 Java 方法调用此代码。
Image icon = new Image(getClass().getResource("/images/system-help.png").toExternalForm());
但我收到此警告消息:
non-static method getClass() cannot be referenced from a static context
您能告诉我重写此代码以便将其用于静态方法的正确方法是什么吗?
一句忠告=>不要这样做。
一般来说,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 配置文件。
在静态上下文中访问类的方法是使用封闭类中的类文字。
前任:
public class Foo {
private static final Image icon;
static {
icon = new Image(Foo.class.getResource(...));
}
}
利用
MyClass.class.getResource
或尝试:
ImageIO.read(new File("/images/system-help.png"))