【发布时间】:2013-12-01 03:23:48
【问题描述】:
我正在编写一个具有多种不同视图的程序。其中之一是相当密集的图形(它显示一个互连的图形)。其他人只显示小而复杂的图表。
我发现主视图的绘制时间很长(即使只是绘制当前可见区域),并且在绘制时,界面的其余部分变得非常慢。
我的问题是,我可以创建一个新线程来处理绘画 - 如果是这样,它会导致性能提升,我怀疑它不会。我尝试了以下方法:
创建一个抽象类 ThreadPaintablePanel,我的复杂视图继承自。
public abstract class ThreadPaintablePanel extends JPanel{
private Thread painter;
public abstract void paintThread(Graphics g);
protected void callPaintThread(Graphics g){
if(painter != null){
painter.interrupt();
}
painter = new Thread(new PaintRunnable(this, g));
painter.start();
}
}
那么在我复杂的视图中,我的paintComponent 方法很简单:super.callPaintThread(g);
重写的paintThread 方法包含我所有的绘画代码。然而,这会导致未上漆的面板。我错过了什么明显的东西吗?
谢谢
【问题讨论】:
-
应在 EDT 上修改 Swing GUI。为了尽快获得更好的帮助,请发帖SSCCE。
标签: java multithreading swing paint