2014-08-29 2 views
0

После нажатия кнопки в моем приложении она создает новую нормальную тему и начинает загрузку большого изображения и сохранение его в файл. Все идет хорошо, но когда я нажимаю кнопку несколько раз, это происходит без ошибок, и когда я пытаюсь просмотреть эти изображения, они прослушиваются, как они перезаписывают себя.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; 
    } 
    } 
} 

EDIT: путь на 100% уникален (разные папки с кодом продукта). И это не проблема с изображением с камеры - я могу открыть 10 карт, я не вижу ошибок изображения

EDIT2: Может это что-то вроде загрузки Img bufor? Потому что все изображения загружаются с одного и того же IP-адреса. Или, может быть, проблема с утечками памяти bufferedimg. Нужна идея, как его восстановить.

EDIT3: Я обнаружил, что если я открою 5 карт в веб-браузере с адресом моей камеры, например: blah.blah.some.ip/GetImage.cgi? CH = 0 Они загружаются один за другим, не все в один раз. Но, я не вижу загруженные изображения, когда загрузка заканчивается.

EDIT4: Я попытался воспроизвести эту ошибку в веб-браузере, если я попытаюсь открыть ссылку в ff и в IE. IE печатает «getImage busy». Когда я пытаюсь ff и хром, у меня сломаны изображения. Поэтому мне нужно сделать что-то вроде очереди или отключить кнопку ...

EDIT5: Мое временное решение: синхронизированная функция productSave. Изображения из второго щелчка будут сохранены несколько секунд спустя.

http://oi57.tinypic.com/ofrrn.jpg!

One from saved Images

+0

, где переменный я прихожу? это полный код? – tgkprog

+1

Возможный дубликат [Threads and file writing] (http://stackoverflow.com/questions/9972549/threads-and-file-writing) – BCartolo

+0

@BCartolo У каждого изображения есть свой файл. –

ответ

1

Первое действие события щелчка на кнопке должна быть, чтобы отключить кнопку и, возможно, изменить текст «В процессе». Последнее действие должно состоять в том, чтобы снова включить кнопку и восстановить текст.

+0

, тогда в чем смысл использования потоков? просто сохраняйте переменные отдельно – tgkprog

+0

Дело не в блокировке потока графического интерфейса. http://blogs.planetsoftware.com.au/paul/archive/2010/12/05/waiting-for-a-task-donrsquot-block-the-main-ui-thread.aspx – BCartolo

+0

Я не могу отключить кнопку потому что у людей должна быть возможность сохранить следующее изображение, даже если предыдущий еще не загружен –

0

Этот ответ является предположением, поскольку вы не дали полный код, вопрос может быть с переменной i - откуда она?

Или может быть то же имя файла используется повторно, mnake уверен, что это Nto случае, получив уникальное имя файла из отдельной функции что-то вроде этого:

если DateFormat только на минуту или второй, то же имя файла может быть использован для 2-х изображений использовать этот API из java.io.File, чтобы получить уникальное имя

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile%28java.lang.String,%20java.lang.String,%20java.io.File%29

общественность статической createTempFile файла (String префикс, суффикс строки, каталог файла)

// вы можете передать Внутр, как JPG

public File getFileName(File localPath ,Date dateSave, int i, String extn){ 
    File fileUniqe = File.createTempFile(dateSave + "_" + (i+1), extn, localPath); 
    return fileUniqe, 
} 
+0

, поэтому я - локальная переменная, все еще использую функцию выше, чтобы получить уникальное имя файла. – tgkprog

+0

Обновленный код, который уже отлаживается, Не проблема с именем файла - его 100% уникальный, потому что localpath указывает текущий код продукта –

+0

Какая вред в попытке этого? – tgkprog

Смежные вопросы