在paintcomponent方法中绘制大量图像非常耗时

时间:2016-05-27 17:23:29

标签: java paintcomponent

requests.post(url, headers={"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"})

我试图使用paintComponent()方法绘制80个图像。我还有另一个对象,当我按下右箭头键,继续向右移动,当按下左箭头键时,它继续向左移动,依此类推(使用按键事件)。但是每次调用绘制组件时,其他可移动对象的移动变得非常慢。我怎样才能顺利运行。我怎样才能阻止砖块每次涂漆?

2 个答案:

答案 0 :(得分:2)

假设您的代码摘录来自paintComponent()方法,那么您在那里做的工作远远超过您应该做的。在每次更新时,您的paintComponent()必须从磁盘读取每个文件(I / O非常昂贵),并从其内容构建BufferedImage(不一定便宜)。然后它只丢弃图像,这个图像看起来可能至少达到几十KB,最终会开始对GC施加压力。

除非您有理由期望在程序运行时修改图像文件(甚至可能 将被修改),您可以通过读取所有文件来显着提高性能每个,并保持BufferedImage个对象以供paintComponent()重复使用。如果图像的相对位置没有改变,那么你甚至可以考虑从它们的内容构建一个大图像,并让paintComponent()绘制它。

答案 1 :(得分:1)

您可以通过预先加载图片来大大加快printComponent方法的速度

在构造函数中创建类似BricksListImgs的列表,执行

Image BricksListImgs[];

MyConstructor () {
  BricksListImgs = new BricksListImgs[bricksList.size()];
  for (int i = 0; i < bricksList.size(); i++) {
    BricksListImgs[i] = ImageIO.read(new File(bricksList.get(i).img));
  }
}

然后在paintComponent方法

中从BriksListImgs中绘制图像