Java 将JOGL与QtJambi一起使用

Java 将JOGL与QtJambi一起使用,java,jogl,qt-jambi,Java,Jogl,Qt Jambi,我正试着用慢跑来对付杰米。我正在使用我在教程(其中一些非常旧)和论坛中找到的代码,但没有显示任何内容。QGLWidget初始化阻止显示窗口。 控制台中没有错误。程序正在运行,但没有窗口 我做错什么了吗 这是我的密码 GLWidget public class QtJOGLTestGLWidget extends QGLWidget { protected GLContext context; protected GL gl; public QtJOGLTes

我正试着用慢跑来对付杰米。我正在使用我在教程(其中一些非常旧)和论坛中找到的代码,但没有显示任何内容。QGLWidget初始化阻止显示窗口。 控制台中没有错误。程序正在运行,但没有窗口

我做错什么了吗

这是我的密码

GLWidget

    public class QtJOGLTestGLWidget extends QGLWidget
{
    protected GLContext context; 
    protected GL gl; 

    public QtJOGLTestGLWidget()
    {
        this(null); 
    }

    public QtJOGLTestGLWidget(QWidget parent)
    {
        super(parent); 
    }

    @Override
    protected void initializeGL()
    {
        GLProfile profile = GLProfile.get(GLProfile.GL2); 
        GLCapabilities glCaps = new GLCapabilities(profile); 
        glCaps.setPBuffer(true); 
        GLDrawableFactory factory = GLDrawableFactory.getFactory(profile); 
        context().makeCurrent(); 
        this.context = factory.createExternalGLContext(); 
        this.context.makeCurrent(); 
        this.gl = this.context.getGL(); 
    }

    @Override 
    protected void resizeGL(int w, int h)
    {
        GL2 gl2 = this.gl.getGL2(); 
        gl2.glViewport(0, 0, w, h);
        gl2.glMatrixMode(GL2.GL_PROJECTION);
        float r = 3.0f / 2.0f;
        gl2.glLoadIdentity();
        gl2.glFrustum(-0.2, 1 * r, -0.2, 1.2, 1, 2000);
    }

    @Override
    protected void paintGL()
    {
        GL2 gl2 = this.gl.getGL2(); 

        gl2.glMatrixMode(GL2.GL_MODELVIEW);
        gl2.glLoadIdentity();

        gl2.glBegin(GL.GL_TRIANGLES);
        {
            gl2.glColor3f(1, 0, 0);
            gl2.glVertex3f(0, 0, -1);
            gl2.glColor3f(0, 1, 0);
            gl2.glVertex3f(0, 1, -1);
            gl2.glColor3f(0, 0, 1);
            gl2.glVertex3f(1, 0, -1);
        }
        gl2.glEnd();
    }
}
窗户

    public class QtJOGLTestFrame extends QMainWindow
{
    protected QtJOGLTestGLWidget glWidget; 
    protected QGridLayout gridLayout; 

    public QtJOGLTestFrame()
    {
        this.gridLayout = new QGridLayout(); 
        this.glWidget = new QtJOGLTestGLWidget(this); // This line prevents the window to be displayed 
        this.gridLayout.addWidget(this.glWidget, 0, 0); 

        QWidget widget = new QWidget(); 
        widget.setLayout(this.gridLayout); 
        this.setCentralWidget(widget); 
        this.setWindowTitle("Hello JOGL");
    }
}
主要

我使用的是JOGL和Mac OS X Sierra的最新版本


先谢谢你

请更准确地说,“最后”是模糊的。您是否使用JOGL2.3.2?请发布一个SSCCE,不仅仅是一小段代码。它确实是JOGL的2.3.2版本。这里有我测试的所有代码。我在运行配置的VM参数中放置了-XstartOnFirstThread。我可以添加哪些信息?首先,将GL实例存储在受保护的变量中是一个坏主意,因为它随时可能变得无效。其次,我认为你的问题来自于语境的创造。您应该稍后创建外部OpenGL上下文,但也许使用context().getGL()就足够了。我不知道QGLWidget是如何工作的。您应该创建一个新版本,并要求QtJambi维护人员提供一个使用JOGL2的工作示例,这个使用JOGL1:请更准确地说,“last”是模糊的。您是否使用JOGL2.3.2?请发布一个SSCCE,不仅仅是一小段代码。它确实是JOGL的2.3.2版本。这里有我测试的所有代码。我在运行配置的VM参数中放置了-XstartOnFirstThread。我可以添加哪些信息?首先,将GL实例存储在受保护的变量中是一个坏主意,因为它随时可能变得无效。其次,我认为你的问题来自于语境的创造。您应该稍后创建外部OpenGL上下文,但也许使用context().getGL()就足够了。我不知道QGLWidget是如何工作的。您应该创建一个新版本,并要求QtJambi维护人员提供一个使用JOGL 2的工作示例,这个使用JOGL 1:
    public class QtJOGLTest
{
    public static void main(String[] args)
    {
        QApplication.initialize(args);
        QtJOGLTestFrame frame = new QtJOGLTestFrame(); 
        frame.resize(800, 600); 
        frame.show(); 
        QApplication.execStatic();
    }
}