内部图形尚未初始化:javafx
Internal graphics not initialized yet: javafx
我正在尝试在 window 中编写一个包含多个图像的 javaFx
应用程序。
简而言之,我有一个名为 Candy
的 enum
class,每个糖果都有一些属性和代表它的图像文件的路径。
在我的 javafx.application
class (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
class 的实例时,应用程序都会抛出 java.lang.RuntimeException: Internal graphics not initialized yet
。
我怎样才能初始图形,我似乎没有?
首先,如果您使用 linux,运行 JavaFX 需要 GTK 2.18。请尝试安装
libswt-gtk-3-java
只要您的屏幕为空,就会抛出此异常。尝试在 start
方法中创建图像。就在 primaryStage.show();
.
之前
也看看这个link
我不知道它到底是如何工作的,但是当我们在开始时第一次创建 JFXPanel 时,我们不会再收到错误了。
JFXPanel jfxPanel = new JFXPanel();
实际上,JavaFX Stage class 是顶级 JavaFX 容器,应在 JavaFX 应用程序线程上构建和修改。
您在这里使用的是 Stage class,但尚未将 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
我正在尝试在 window 中编写一个包含多个图像的 javaFx
应用程序。
简而言之,我有一个名为 Candy
的 enum
class,每个糖果都有一些属性和代表它的图像文件的路径。
在我的 javafx.application
class (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
class 的实例时,应用程序都会抛出 java.lang.RuntimeException: Internal graphics not initialized yet
。
我怎样才能初始图形,我似乎没有?
首先,如果您使用 linux,运行 JavaFX 需要 GTK 2.18。请尝试安装
libswt-gtk-3-java
只要您的屏幕为空,就会抛出此异常。尝试在 start
方法中创建图像。就在 primaryStage.show();
.
也看看这个link
我不知道它到底是如何工作的,但是当我们在开始时第一次创建 JFXPanel 时,我们不会再收到错误了。
JFXPanel jfxPanel = new JFXPanel();
实际上,JavaFX Stage class 是顶级 JavaFX 容器,应在 JavaFX 应用程序线程上构建和修改。
您在这里使用的是 Stage class,但尚未将 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