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