2016-11-29 15 views
0

Я использую перформансы для загрузки изображения, обрезаю его, а затем отобразим окончательное изображение на графическом изображении.Графические графики с графическим интерфейсом Непокрытый файл, заблокированный файл

Процесс работает нормально, но проблема в том, что когда я получаю окончательное изображение для отображения на графическом изображении, поток не закрывается, а файл сохраняется java.exe, поэтому у меня возникают проблемы с удаление файлов/каталогов, например, когда пользователь выходит из системы, потому что это всего лишь временная директория.

Это добытчик моей StreamedContent:

public StreamedContent getGraphicCropped() { 
    try{ 
     if (newImageName != null) { 
      File file2 = new File(pathCroppedImage); 
      InputStream input = new FileInputStream(file2); 
      graphicCropped = new DefaultStreamedContent(input); 
      showImageFinal = true; 
     } 

    } catch(Exception e){ 
     e.printStackTrace(); 
    } 

    return graphicCropped; 
} 

Если я input.close(); то я могу удалить файл, но он не отображается, потому что я знаю, что этот геттер называется более чем один раз на жизненный цикл.

ответ

0

Я решил его с помощью предложенного добытчик в StreamedContent:

public StreamedContent getGraphicCropped() throws FileNotFoundException { 

    FacesContext context = FacesContext.getCurrentInstance(); 

    if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { 
     // So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL. 
     return new DefaultStreamedContent(); 
    } 
    else { 
     // So, browser is requesting the image. Return a real StreamedContent with the image bytes. 
     File file2 = new File(pathCroppedImage); 
     InputStream input = new FileInputStream(file2); 
     showImageFinal = true; 
     return new DefaultStreamedContent(input); 
    } 
}