在自己的线程中运行JPanel。

时间:2010-07-15 23:54:22

标签: java multithreading swing jpanel jcomponent

我在使用Swing组件时遇到了一些麻烦。

在一个JFrame中,我有一个由GLCanvas分隔的JEditorPane和一个JSplitPane。此配置使两个面板中的显示响应不稳定。

但是,当我将GLCanvasJEditorPane分别放在他们自己的JFrame中时,显示响应很棒。

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

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

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

我认为你的假设不正确。所有Swing绘制操作都在同一个线程上进行。

也许你可以扩展你对'波涛汹涌'的描述?也许这是双缓冲与非双缓冲问题?

答案 2 :(得分:1)

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