2012-03-22 4 views
0

У меня есть класс ImageBean, и я хочу использовать его для загрузки изображений из массива. Я предварительно загрузил массив изображениями (всего 9) и хочу отображать одно изображение последовательно каждый раз, когда я обновляю браузер. Изображения называются «1.jpg, 2.jpg» и т. Д. (i.e image '1' -hit refresh, image '2' hit refresh, ... image '9'). Любая помощь будет принята с благодарностью. Благодарю.Java Server Faces Загрузка изображений из массива

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); 
    } 
} 

Edit 1

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

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]; 
    } 
} 
+0

Crossposted к протоколу HTTPS://forums.oracle.com/forums/thread.jspa?threadID=2362283 – EJP

ответ

1

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

@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

Спасибо за ваш ответ. Я думаю, что проблема связана с моей страницей Java Server. 'code' ' code' - это то, что у меня есть в моем классе JSP, я уверен, что это неправильно , – omegaFlame

+0

Возможно, возникла ошибка ArrayOutOfBonds, так как это продолжало бы расти до 8. –

+0

Любые предложения по JSP-классу? – omegaFlame

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

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

+0

Спасибо за ваш ответ. Но теперь я получаю java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 брошен в браузере. Есть идеи? Спасибо – omegaFlame

+0

Не могли бы вы показать, где это происходит? –

+0

У меня есть страница JSF с линией Внутри тела. Я считаю, что это причина. – omegaFlame

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