点击我的应用程序中的按钮后,它会创建新的正常线程并开始下载大图像并将其保存到文件。一切都很顺利,但是当我单击按钮不止一次它没有错误,当我尝试查看这些图像时,他们像他们重写自己一样被窃听。Java在线程中保存大图像-IP摄像机破碎的图像
我不知道如何调试它。
localPath = today + "/" + productCode + "/" + this.placeId; //Unique
/* ... */
private void productSave(String productCode, int whichCamera, boolean isError) {
for (int i = position; i < lastCamera; i++) {
Date dateSave = new Date();
path = localPath + "/" + dateFormat.format(dateSave) + "_" + (i + 1) + ".jpg";
try {
BufferedImage imageOld = ImageIO.read(new URL(this.camerasUrlsToSave[i]));
ImageIO.write(imageOld, "jpg", new File(rootPath + "/" + path));
ComDb.getInstance().saveProduct(productCode, this.placeId, path, dateSave);
} catch (IOException ex) {
result = false;
}
}
}
编辑:路径是100%独特(与产品代码不同的文件夹)。它不应该是从相机图像的问题 - 我可以打开10张卡,我没有看到图像错误
EDIT2:它可以像下载Img bufor?导致所有图像从相同的IP下载。或者,也许它与bufferedimg内存泄漏的问题。需要想法如何修复它。编辑3:我发现如果我在我的相机地址如:blah.blah.some.ip/GetImage.cgi?CH = 0在网络浏览器中打开5张卡片,他们一个接一个地加载,而不是全部一旦。但是,当下载结束时,我没有看到窃听图像。编辑4:我试图在网页浏览器中重现此错误,如果我尝试在ff和IE中打开链接。 IE打印出“getImage busy”。当我尝试使用ff和chrome时,我得到了破碎的图像。所以我必须像排队或禁用按钮......
EDIT5:我的临时解决方案:同步功能productSave。第二次点击后的图像将在几秒钟后保存。
http://oi57.tinypic.com/ofrrn.jpg!
其中变量i是从哪里来的?这是完整的代码吗? – tgkprog 2014-08-29 12:42:57
[Threads and file writing]的可能重复(http://stackoverflow.com/questions/9972549/threads-and-file-writing) – BCartolo 2014-08-29 12:45:52
@BCartolo每张图片都有自己的文件。 – 2014-08-29 12:56:00