1
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;
}

}

上記のアクティベーター クラスで、(JPanel) グラフパネルを (JPannel) testFrame.getPanel1() に追加ます次に、testFrame クラスのボタンを使用してremoveAll()メソッドを使用し、静的なグラフパネルを再度追加しましたが、以下のエラーが発生しました。

デバッグすると、 GLcanvas がピアを失っていることがわかります。解決策が見つかりませんでした。

スレッド「Thread-3」の例外 java.lang.RuntimeException: javax.media.opengl.GLException: Jogamp.common.awt.AWTEDTExecutor.invoke(AWTEDTExecutor.java:58) でデバイス コンテキスト 0xffffffffde01148b の一時 OpenGL コンテキストを作成できませんjogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:103) javax での jogamp.opengl.ThreadingImpl.invokeOnOpenGLThread(ThreadingImpl.java:205) で.media.opengl.Threading.invoke(Threading.java:191) at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:449) at grafik.view.grafik.Gcontroller.draw(Gcontroller.java:169) ) で grafik.model.data.Dcontroller.drawAll(Dcontroller.java:272) で grafik.view.Wcontroller.GdataClean(Wcontroller.java:261) で grafik.view.WThread.run(WThread.java:57) 原因: javax.media.opengl.GLException: Jogamp.opengl.windows.wgl.WindowsWGLContext.createImpl(WindowsWGLContext.java:306) でデバイス コンテキスト 0xffffffffde01148b の一時 OpenGL コンテキストを作成できませんjogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:572) で jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:485) で jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:645) で jogamp.opengl. GLDrawableHelper.invokeGL(GLDrawableHelper.java:594) の javax.media.opengl.awt.GLCanvas$8.run(GLCanvas.java:996) の java.awt.event.InvocationEvent.dispatch(不明なソース) の java.awt.EventQueue java.awt.EventQueue.access$300 の .dispatchEventImpl(不明なソース) (java.awt.EventQueue$3 の不明なソース)。java.awt.EventQueue$3 で (不明なソース) を実行します。 java.awt.EventDispatchThread.pumpOneEventForFilters (不明なソース) での dispatchEvent(不明なソース) java.awt.EventDispatchThread.pumpEventsForFilter(不明なソース) での java.awt.EventDispatchThread.pumpEventsForHierarchy(不明なソース) でソース不明) java.awt.EventDispatchThread.pumpEvents(ソース不明) java.awt.EventDispatchThread.run(ソース不明)java.awt.EventQueue.dispatchEvent の doIntersectionPrivilege(不明なソース) java.awt.EventDispatchThread.pumpOneEventForFilters の(不明なソース) java.awt.EventDispatchThread.pumpEventsForFilter(不明なソース) の java.awt.EventDispatchThread.pumpEventsForHierarchy(ソース不明) java.awt.EventDispatchThread.pumpEvents(ソース不明) java.awt.EventDispatchThread.pumpEvents(ソース不明) java.awt.EventDispatchThread.run(ソース不明)java.awt.EventQueue.dispatchEvent の doIntersectionPrivilege(不明なソース) java.awt.EventDispatchThread.pumpOneEventForFilters の(不明なソース) java.awt.EventDispatchThread.pumpEventsForFilter(不明なソース) の java.awt.EventDispatchThread.pumpEventsForHierarchy(ソース不明) java.awt.EventDispatchThread.pumpEvents(ソース不明) java.awt.EventDispatchThread.pumpEvents(ソース不明) java.awt.EventDispatchThread.run(ソース不明)java.awt.EventDispatchThread.pumpEvents(不明なソース) のpumpEvents(不明なソース) java.awt.EventDispatchThread.run(不明なソース)java.awt.EventDispatchThread.pumpEvents(不明なソース) のpumpEvents(不明なソース) java.awt.EventDispatchThread.run(不明なソース)

4

1 に答える 1

1

JOGL 2.3.1 に切り替えてください。次に、「javax.media」を「com.jogamp」に置き換えて、コンパイル エラーを回避します。

親コンテナーから AWT GLCanvas を削除すると、ピアが失われ、OpenGL コンテキストが破棄されます。これは、この種のキャンバスを使用する場合に避けることのできないものです。これが望ましい動作でない場合は、NEWT に切り替えます。

一部のハードウェアでは、特定のケースで別のコンテキストの作成が失敗する場合があります。JOGL の最新バージョンでも同じスタック トレースが得られる場合は、バグ レポートを記入してください: http://jogamp.org/wiki/index.php/Jogl_FAQ#Bugreports_.26_Testing

于 2015-04-14T10:12:30.313 に答える