Java Server Faces Загрузка изображений из массива - PullRequest
0 голосов
/ 22 марта 2012

У меня есть класс ImageBean, и я хочу использовать его для загрузки изображений из массива.Я предварительно загрузил массив с изображениями (всего 9) и хочу отображать одно изображение последовательно каждый раз, когда я обновляю браузер.Изображения называются «1.jpg, 2.jpg» и т. Д. (Т. Е. Изображение «1» - хитовое обновление, изображение «2», обновление хита, ... изображение «9»).Любая помощь будет принята с благодарностью.Спасибо.

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
import java.util.ArrayList;
import javax.imageio.ImageIO;

@ManagedBean(name="ImageBean")
@SessionScoped
public class ImageBean implements Serializable 
{
    private static final long serialVersionUID = 1L;
    ArrayList<Image> myArr = new ArrayList<Image>();
    BufferedImage img = null;

    public ImageBean()
    {
        for(int i = 1; i < 10; i++)
        {
            try 
            {
                img = ImageIO.read(new File(i + ".jpg"));
            } 
            catch (IOException ex) {}

            myArr.add(img);
        }
    }

    public BufferedImage getImage(int i) 
    {
        return (BufferedImage) myArr.get(i);
    }
}

Редактировать 1

Я немного отредактировал код, поэтому вместо ArrayList я использую массив BufferedImage.Теперь я не получаю сообщение об ошибке, но изображение не отображается в браузере.

public class ImageBean implements Serializable 
{
    private static final long serialVersionUID = 1L;
    BufferedImage[] myArr = new BufferedImage[9];

    public ImageBean()
    {
        for(int i = 0; i < 9; i++)
        {
            try 
            {
                myArr[i] = (ImageIO.read(new File(i+1 + ".jpg")));
            } 
            catch (IOException ex) {}
        }
    }

    public BufferedImage getImage(int i) 
    {
        return (BufferedImage) myArr[i];
    }
}

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Простым решением было бы добавить переменную для хранения текущего изображения и просто получить следующее изображение ... (просто имейте в виду сброс для последнего изображения)

@SessionScoped
public class ImageBean implements Serializable 
{
    private static final long serialVersionUID = 1L;
    ArrayList<Image> myArr = new ArrayList<Image>();
    BufferedImage img = null;

    private int currImgId = 1;

    public ImageBean()
    {
        for(int i = 1; i < 10; i++)
        {
            try 
            {
                img = ImageIO.read(new File(i + ".jpg"));
            } 
            catch (IOException ex) {}

            myArr.add(img);
        }
    }

  public BufferedImage getImage() 
  {
    // Reset logic would go here...probably best with array.size...
    return (BufferedImage) myArr.get(currImgId++);
  }

}
0 голосов
/ 22 марта 2012
public ImageBean()
    {
        for(int i = 1; i < 10; i++)
        {
            try 
            {
                myArr.add(ImageIO.read(new File(i + ".jpg")));
            } 
            catch (IOException ex) {}
        }
    }

первоначально, если это не удалось, он будет продолжать добавлять предыдущее изображение.Это, возможно, заставило его «замерзнуть», так как оно действительно проходило бы через изображения, но на самом деле просто отображало то же самое.

...