在我的应用程序中,我有一个类作为Swing组件来使用LWJGL渲染3D窗口。当我开始运行该应用时,我收到来自Display.create()
Parent.isDisplayable() must be true
的错误。我试过看了,大多数人都说这是在调用setVisible()之前调用Display.create()时发生的。但是,这不是这种情况,我似乎无法弄清楚为什么我会收到错误。
我的控件如下:
public class WorldCanvas extends JPanel {
private final Canvas canvas = new Canvas();
public WorldCanvas() {
...
add(canvas, BorderLayout.CENTER);
try {
Display.setParent(canvas);
setVisible(true);
canvas.setVisible(true);
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
return;
}
}
}
它被直接添加到JFrame中,并且在添加它之前也会在JFrame上调用setVisible(true)(但是这个错误在它甚至可以被添加之前生成,因为它在构造函数中)。为什么我会收到此错误?
答案 0 :(得分:1)
您正在尝试在包含Canvas的JPanel的构造函数中创建显示。
因此Canvas不可显示,因为它的父类WorldCanvas不可显示,因为它即将被创建。
您必须将初始化移动到构造函数之后调用的方法中。