Java服务器面临从阵列加载图像的问题

Java服务器面临从阵列加载图像的问题,java,jsf-2,javabeans,Java,Jsf 2,Javabeans,我有一个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

我有一个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);
    }
}
导入java.awt.Image;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.SessionScoped;
导入java.io.Serializable;
导入java.util.ArrayList;
导入javax.imageio.imageio;
@ManagedBean(name=“ImageBean”)
@会议范围
公共类ImageBean实现了可序列化
{
私有静态最终长serialVersionUID=1L;
ArrayList myArr=新的ArrayList();
BuffereImage img=null;
公共ImageBean()
{
对于(int i=1;i<10;i++)
{
尝试
{
img=ImageIO.read(新文件(i+“.jpg”);
} 
catch(IOException ex){}
myArr.add(img);
}
}
公共缓冲区映像getImage(int i)
{
返回(BufferedImage)myArr.get(i);
}
}
编辑1

我稍微编辑了代码,因此使用了BuffereImage数组而不是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];
    }
}
公共类ImageBean实现可序列化
{
私有静态最终长serialVersionUID=1L;
BuffereImage[]myArr=新的BuffereImage[9];
公共ImageBean()
{
对于(int i=0;i<9;i++)
{
尝试
{
myArr[i]=(ImageIO.read(新文件(i+1+“.jpg”));
} 
catch(IOException ex){}
}
}
公共缓冲区映像getImage(int i)
{
返回(BufferedImage)myArr[i];
}
}
公共ImageBean()
{
对于(int i=1;i<10;i++)
{
尝试
{
myArr.add(ImageIO.read(新文件(i+“.jpg”));
} 
catch(IOException ex){}
}
}

最初,如果失败,它将继续添加上一个图像。这可能会使它“冻结”,因为它将真正通过图像,但实际上只是显示相同的图像。

一个简单的解决方案是添加一个变量来保存当前图像,然后只获取下一个图像。。。(请记住为最后一张图像重置)

@SessionScoped
公共类ImageBean实现了可序列化
{
私有静态最终长serialVersionUID=1L;
ArrayList myArr=新的ArrayList();
BuffereImage img=null;
私有int currImgId=1;
公共ImageBean()
{
对于(int i=1;i<10;i++)
{
尝试
{
img=ImageIO.read(新文件(i+“.jpg”);
} 
catch(IOException ex){}
myArr.add(img);
}
}
公共缓冲区映像getImage()
{
//重置逻辑会在这里…可能最好使用数组。大小。。。
return(BufferedImage)myArr.get(currImgId++);
}
}

谢谢您的回复。但是现在我在浏览器中抛出java.lang.IndexOutOfBoundsException:Index:0,Size:0。有什么想法吗?谢谢,我有一个JSF页面,里面有一行,我相信这就是原因。谢谢你的回复。我认为问题在于我的Java服务器页面
code
code
是我的JSP类中的内容,我确信它是错误的。可能会创建一个ArrayOutOfBonds错误,因为这会持续上升到超过8。对JSP类有什么建议吗?您的问题是h:graphicImage用于URL而不是二进制数据,所以您可以创建一个Servlet来获取图像(请参阅以获取参考,或使用richFaces()或prime Faces等@omegaFlame,还有一件事请听Legend,在执行currImgId++之前,您必须用检查ArraySize的代码替换getImage代码……还有一件事(正如我最近听说的那样)既然你是新来的,别忘了将答案标记为已接受(实际上是帮助最大的答案..如果有的话..;-)…交叉贴到
public ImageBean()
    {
        for(int i = 1; i < 10; i++)
        {
            try 
            {
                myArr.add(ImageIO.read(new File(i + ".jpg")));
            } 
            catch (IOException ex) {}
        }
    }
@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++);
  }

}