如何从静态方法加载图像
我有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 Image可能不是一个好主意。
由于RT-30796在初始化“内部图形”之前无法创建JavaFX图像 ,因此不建议尝试在静态上下文中创建JavaFX图像。
在JavaFX内部图形引擎初始化之前,RT-30796中阻止在静态上下文中加载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"))