gpt4 book ai didi

java - 关闭运行 OpenGL 内容的 JavaFX 窗口时出现奇怪的错误

转载 作者:行者123 更新时间:2023-12-02 09:07:51 33 4
gpt4 key购买 nike

我有一个 JavaFX 应用程序,其中包含一个带有 OpenGL 应用程序的 SwingNode。大多数时候,一切都很好,但有时当我关闭窗口时,我会收到此错误:

Catched Exception on thread AWT-EventQueue-0
javax.media.nativewindow.NativeWindowException: DC not released: GDISurface[ displayHandle 0x0
, surfaceHandle 0xffffffffe201277c
, size 2560x1361
, UOB[ OWNS_SURFACE | OWNS_DEVICE | WINDOW_INVISIBLE ]
, WindowsWGLGraphicsConfiguration[DefaultGraphicsScreen[WindowsGraphicsDevice[type .windows, connection decon, unitID 0, handle 0x0, owner false, NullToolkitLock[]], idx 0], pfdID 7, ARB-Choosen true,
requested GLCaps[rgba 8/8/8/8, opaque, accum-rgba 0/0/0/0, dp/st/ms 24/0/0, one, mono , hw, GLProfile[GL4bc/GL4bc.hw], on-scr[.]],
chosen GLCaps[wgl vid 7 arb: rgba 8/8/8/8, opaque, accum-rgba 0/0/0/0, dp/st/ms 24/0/0, one, mono , hw, GLProfile[GL4bc/GL4bc.hw], offscr[fbo]]]
, surfaceLock <4a7b3290, 6de653ec>[count 1, qsz 0, owner <AWT-EventQueue-0>]
, GDIDummyUpstreamSurfaceHook[ 2560x1361]
, upstreamSurface false ], isWindow false, werr 0, thread: AWT-EventQueue-0
at jogamp.nativewindow.windows.GDISurface.unlockSurfaceImpl(GDISurface.java:121)
at jogamp.nativewindow.ProxySurfaceImpl.unlockSurface(ProxySurfaceImpl.java:226)
at jogamp.opengl.GLDrawableImpl.unlockSurface(GLDrawableImpl.java:334)
at jogamp.opengl.GLContextImpl.release(GLContextImpl.java:354)
at jogamp.opengl.GLContextImpl.release(GLContextImpl.java:316)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1132)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:994)
at javax.media.opengl.awt.GLJPanel$OffscreenBackend.doPaintComponent(GLJPanel.java:1731)
at javax.media.opengl.awt.GLJPanel.paintComponent(GLJPanel.java:538)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at sun.swing.JLightweightFrame$3.paint(JLightweightFrame.java:309)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager.paint(RepaintManager.java:1275)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.JComponent.paintImmediately(JComponent.java:4950)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我搜索了它可能的内容,但找不到任何内容。有人知道为什么会发生这种情况吗?这是我用来关闭应用程序的代码:

// Close operation
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent t) {
Platform.exit();
System.exit(0);
}
});

最佳答案

我不确定,但是您正在执行 Platform.exit() ,这会强制 Application.lauch() 返回,因此您应该将 System.exit() 放在 main() 函数中,因为当您执行 Platform.exit() 时,JavaFX 运行时会关闭。 exit() 和 stop() 方法被调用,但同时 System.exit() 被调用

关于java - 关闭运行 OpenGL 内容的 JavaFX 窗口时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59667656/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com