【问题标题】:Why JOGL-SWT GLCanvas is only displayed when Shell is resized?为什么 JOGL-SWT GLCanvas 仅在调整 Shell 大小时显示?
【发布时间】:2017-09-29 23:20:01
【问题描述】:

我有一个基于 SWT 的 JOGL 2D 图表测试,带有四个 GLCanvas:图例、底轴、左轴和系列。该组件嵌入在 SWT Shell 中,并通过生成的“信号”从线程定期更新。

这是外壳的屏幕截图:

如您所见,图例、左轴和系列区域已正确更新,但在创建外壳后底轴不可见,必须调整外壳的大小才能最终显示底轴:

这是显示底部轴(文本)的代码:

bottomAxisAreaGLContext.getGL().getGL2().glColor3f(fontColor.getRed() / 255, fontColor.getGreen() / 255, fontColor.getBlue() / 255);
for (int i = 0; i < verticalGridLinesPositions.size(); i++) {
        int position = verticalGridLinesPositions.get(i).intValue();
        double value = (i + 1) * (windowTimeWidth) / (verticalGridLinesPositions.size() + 1);
        String valueString = decimalFormatter.format(value).replaceAll("E0$", "");
        int valueStringLength = glut.glutBitmapLength(getFontNumber(), valueString);
        bottomAxisAreaGLContext.getGL().getGL2().glRasterPos3f(position - valueStringLength / 2, getBottomAxisHeight() / 2 - getFontHeight() / 2, 0);
        glut.glutBitmapString(getFontNumber(), valueString);
}

类似的方法用于显示左轴。

我不明白为什么必须调整外壳的大小才能显示底轴。

为什么它适用于所有其他 GLCanvas 而不适用于底轴 GLCanvas?

有什么想法吗?

【问题讨论】:

  • 只是为了说明这个问题在 Windows 上不会发生。

标签: swt jogl


【解决方案1】:

确保更新 Shell 的线程具有以下结构:

new Thread() {
            public void run() {

                //your logic...

                display.asyncExec(new Runnable() {
                        public void run() {
                            if (shell.isDisposed())
                                return;
                            shell.redraw();
                        }
                    });
            }
        }.start(); 

【讨论】:

  • 感谢您的回复 navy1978 !我终于将每个图表元素分组到一个 GLCanvas 中,并且可以正常工作。但是我仍然不使用这种双线程“封装”来更新 GLCanvas,我想知道哪个是缺点?
  • SWT 是单线程的,这意味着必须从单个线程(UI 线程)独占访问 UI 对象。长时间运行的任务在后台线程中执行,以保持 UI 响应。这使得后台线程有必要将更新排入队列以在 UI 线程上执行,而不是直接访问 UI 对象。”因此,如果您在 UI 线程中更新您的画布,则不需要“双线程封装”,但如果您从另一个线程更新你的 GUI,你必须使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 2017-04-08
  • 2018-02-24
相关资源
最近更新 更多