内部图形尚未初始化:javafx
Posted
技术标签:
【中文标题】内部图形尚未初始化:javafx【英文标题】:Internal graphics not initialized yet: javafx 【发布时间】:2015-03-06 12:39:17 【问题描述】:我正在尝试编写一个javaFx
应用程序,该应用程序在一个窗口内包含多个图像。
简短的故事是我有一个名为Candy
的enum
类,每个糖果都有一些属性和代表它的图像文件的路径。
在我的 javafx.application
类 (Table
) 的构造函数中,我想用这些图像填充一个数组列表,所以到目前为止我写了这个:
public class Table extends Application
ArrayList<Image> images;
@Override
public void start(Stage primaryStage) throws Exception
primaryStage.setTitle("CandyFx");
primaryStage.show();
public Table()
images = new ArrayList<Image>();
for (Candy candy : Candy.values())
File file = new File (candy.getImagePath());
Image image = new Image(file.toURI().toString());
images.add(image);
现在每次我想创建Table
类的实例时,应用程序都会抛出java.lang.RuntimeException: Internal graphics not initialized yet
。
我如何才能初始化看起来我没有的图形?
【问题讨论】:
在 JavaFX 问题跟踪器中查看相关 cmets:RT-30796 Cannot create a JavaFX Image until "Internal graphics" are initialized。 另外,您永远不应该手动创建 Table 类的实例(例如,永远不要写new Table()
)。 Table 实例将由 Java 启动器创建 - 有关 JavaFX 应用程序生命周期的详细信息,请参阅JavaFX Application documentation。另请注意a JavaFX Application cannot be launched more than once.
@jewelsea 谢谢。但是如果我想在我的应用程序中有一些特殊的方法(比如改变屏幕上某些东西的位置的方法)我想从另一个函数中调用呢? (因为我无法在我创建的实例上调用该方法)
在调用应用程序启动方法后调用与 JavaFX 应用程序线程上的场景图交互的方法。
【参考方案1】:
首先如果你使用的是linux,运行JavaFX需要GTK 2.18。尝试安装
libswt-gtk-3-java
只要您的屏幕为空,就会抛出此异常。尝试在start
方法中创建您的图像。就在primaryStage.show();
之前。
也看看这个链接
http://cr.openjdk.java.net/~vadim/RT-33475/webrev.00/modules/graphics/src/main/java/com/sun/glass/ui/Screen.java.html
【讨论】:
【参考方案2】:我不知道它究竟是如何工作的,但是当我们在开始时第一次创建 JFXPanel 时,我们不会再收到错误了。
JFXPanel jfxPanel = new JFXPanel();
【讨论】:
【参考方案3】:实际上,JavaFX Stage 类是*** JavaFX 容器,应该在 JavaFX 应用线程上构建和修改。
您正在使用 Stage 类,但尚未将 JavaFx 内容嵌入到 Swing 应用程序中,这可能会向您显示 'java.lang.RuntimeException 并显示尚未初始化内部图形的消息。
你可以在这里使用-
JFXPanel jfxPanel = new JFXPanel();
或者你也可以这样使用。
JFrame frame = new JFrame("Java Swing And JavaFX");
JFXPanel jfxPanel = new JFXPanel();
frame.add(jfxPanel);
JFXPanel 是一个将 JavaFX 内容嵌入到 Swing 应用程序中的组件。要显示的内容由接受 JavaFX 场景实例的 setScene(javafx.scene.Scene) 方法指定。分配场景后,它会自动重新绘制。所有的输入和焦点事件都被透明地转发到场景给开发者。
参考资料:
JFXPanel: https://docs.oracle.com/javase/8/javafx/api/javafx/embed/swing/JFXPanel.html
Stage: https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Stage.html
【讨论】:
以上是关于内部图形尚未初始化:javafx的主要内容,如果未能解决你的问题,请参考以下文章