Java swing JPanel示例,GLCanvas错误


public class Activator implements BundleActivator {
TestFrame testFrame = new TestFrame();
public static JPanel graphPanel;
public void start(BundleContext context) throws Exception {

graphPanel = cartesianGraphs.getGraphPanel();

testFrame.getPanel1().add(graphPanel);
testFrame.setVisible(true);
} 
}

public class TestFrame extends JFrame {
private static final long serialVersionUID = 1L;
private library kutuphane = null;
private JPanel contentPane;
private JTabbedPane tabbedPane;
private JPanel panel1;
private JButton btn;

public TestFrame() {
initComponents();
}
private void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 800, 600);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
contentPane.add(getTabbedPane(), BorderLayout.CENTER);
contentPane.add(getBtn(), BorderLayout.NORTH);
}

public JPanel getPanel1() {
if (panel1 == null) {
panel1 = new JPanel();
panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));
}
return panel1;
}
private JButton getBtn() {
if (btn == null) {
btn = new JButton("Remove All and Add");
btnTabSil.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {

TestFrame.this.getPanel1().removeAll();
Activator.graphPanel.revalidate();
// where it throws the exception is below
TestFrame.this.getPanel1().add(Activator.graphPanel);
TestFrame.this.revalidate();
TestFrame.this.repaint();
TestFrame.this.setVisible(true);
}
});
}
return btn;
}

}

在上面的activator类中,我将(JPanel)graphpanel添加到(JPhannel)testFrame.getPanel1()中。然后,通过testFrame类中的一个按钮,我使用了removeAll()法并再次添加静态graphPannel,但我得到了下面的错误

当我调试它时,我看到GLcanvas失去了对等。我找不到解决办法

线程"thread-3"java.lang.RuntimeException中的异常:javax.media.opengl.GL异常:无法创建临时opengl上下文对于设备上下文0xffffffffde01148b位于的jogamp.common.awt.AWTETExecutor.invoke(AWTEDTExecutor.java:58)jogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:103)在jogamp.openg.ThreadingImpl.invokeOnOpenGLThread(ThreadingImpl.java:205)在javax.media.ongle.Threading.invokeOnOpenGLThread(线程.java:172)位于位于在位于-grafik.view.Wcontroller.GdataClean(Wcontroller.java:261)位于-grafik.view.WThread.run(WThread.java:57)由以下原因引起:javax.media.opengl.GL异常:无法创建临时opengl上下文对于设备上下文0xffffffffde01148bjogamp.opengl.windows.wgl.WindowsWGLContext.createImpl(WindowsWGLCntext.java:306)在jogamp.openg.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:572)在jogamp.openg.GLContextImpl.makeCurrent(GLContextImpl.java:485)在jogamp.openGLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:645)在jogamp.openGLDrawableHelper.invokeGL(GLDrawableHelper.java:594)在javax.media.nopeng.awt.GLCanvas$8.run(GLCanvas.java:996)位于的java.awt.event.InvocationEvent.dispatch(未知源)位于的java.awt.EventQueue.dispatchEventImpl(未知源)java.awt.EventQueue.access$300(未知来源),位于java.awt.EventQueue$3.run(未知源)位于java.awt.EventQueue$3.run(未知源)位于位于的java.security.AccessController.doPrivileged(本机方法)java.security.ProtectionDomain$1.doIntersectionPrivilege(未知Source),位于java.awt.EventQueue.dispatchEvent(未知源)java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知Source)(未知源)位于的java.awt.EventDispatchThread.pumpEvents(未知源)java.awt.EventDispatchThread.run(未知源)

请切换到JOGL 2.3.1。然后,将"javax.media"替换为"com.jogamp"以避免任何编译错误。

从其父容器中删除AWT GLCanvas时,它将失去对等对象,并且其OpenGL上下文将被破坏。当使用这种画布时,这是不可避免的。如果这不是所需的行为,请切换到NEWT。

在某些特定情况下,在某些硬件上创建另一个上下文可能会失败。如果您仍然使用最新版本的JOGL获得相同的堆栈跟踪,请填写错误报告:http://jogamp.org/wiki/index.php/Jogl_FAQ#Bugreports_.26_Testing

最新更新