2010-07-15 75 views
1

我对Swing组件有点麻烦。在自己的线程中运行JPanel。

在一个JFrame,我有一个GLCanvasJEditorPane分开JSplitPane。这种配置使两个面板的显示响应波涛汹涌。

但是,当我将GLCanvasJEditorPane分别放在它们自己的JFrame中时,显示响应非常好。

我会认为这是因为,在第二种情况下,对这些组件的所有操作都是在不同的线程中执行的。如果是这样,我的问题如下:

是否有可能在自己的线程中运行组件?还是有更好的方法我应该这样做?

感谢您提供的任何帮助。

+1

不,它们呈现在同一个线程中。 – OscarRyz 2010-07-16 02:41:01

回答

1

我认为你的假设是不正确的。所有Swing绘图操作都发生在同一个线程上。

也许你可以扩大你对'波浪'的描述?也许这是双缓冲与非双缓冲问题?

+0

由于断断续续,我的意思是在按键和正在更新的编辑器窗格中的文本之间存在延迟。同样,移动分割窗格也是滞后的。我希望这是有道理的。 – sparrow400 2010-07-16 19:19:12

4

我怀疑在第一种情况下的糟糕表现更多地与Mixing heavy and light components有关。像大多数图形API一样,Swing使用single, event dispatch thread来更新屏幕;我猜测JOGL必须遵守相同的限制。同时,有many ways在另一个线程中执行工作并与图形环境进行通信。

+0

谢谢,这是有道理的。我会进一步调查。马修的网站似乎是一个很好的起点。 – sparrow400 2010-07-16 19:14:20

1

看起来像@ trashgod是正确的。 GLCanvas是来自awt Canvas的“重量级”组件。要看它是否真的是一个案例我建议用GLJPanel替换GLCanvas,这是一个Swing组件后代JPanel

+0

好找!这看起来是一个很好的选择。 – trashgod 2010-07-16 14:27:36

+0

我实际上已经尝试了这一点,虽然它解决了EditorPane中滞后的问题,但与GLCanvas相比,它的刷新率要慢很多。我真的需要在渲染视图中保持良好的帧速率。 – sparrow400 2010-07-16 19:17:49

+0

由于Swing流水线的额外开销,我确实有较慢的刷新率。正如我现在看到的那样,你真的只有一个选择 - 要分离你的元素,如果你想摆脱“choppinnes” – 2010-07-16 19:31:55