我处于一个非常奇怪的境地。我正在运行一个在 Tomcat 上返回图像的 servlet。
我正在尝试运行此代码: FabricaControladores fabrica = FabricaControladores.getInstance();
String nombreProveedor = request.getParameter("nombre");
IVerInformacionDeProveedor infoProveedor = fabrica.getIVerInformacionDeProveedor();
infoProveedor.SeleccionarProveedor(nombreProveedor);
DataProveedor data = infoProveedor.VerInformacionProveedor();
image = data.getImagen();
BufferedImage bImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = bImage.createGraphics();
graphics.drawImage(image,0,0,null);
graphics.dispose();
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();
ImageIO.write(bImage, "jpeg", out);
out.close();
当我运行它时,我得到了这个错误:
HTTP Status 500 - Width (-1) and height (-1) cannot be <= 0
type Exception report
message Width (-1) and height (-1) cannot be <= 0
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1016)
java.awt.image.BufferedImage.<init>(BufferedImage.java:331)
MostrarImagen.doGet(MostrarImagen.java:110)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs.
Apache Tomcat/7.0.42
非常奇怪的是,使用非常相似的方法在 SWING 应用程序中获取图像,它可以毫无问题地工作。
当我直接使用加载图像时:
new ImageIcon(getClass().getResource("/Imagens/TC.jpg")).getImage())
它完美地展示了它。
就像图像在某处丢失或损坏。有任何想法吗?
编辑
数据提供者
public class DataProveedor{
private String _nickname, _nombreCompania, _nombre, _apellido, _correo, _paginaWeb;
Image _imagen;
private Date _fechaNacimiento;
private Hashtable<Integer,DataProducto> _productos;
public DataProveedor(String nickname, String nombreCompania,
String nombre, String apellido, String correo,
String paginaWeb, Date fechaNacimiento,
Hashtable<Integer, DataProducto> productos) {
this._nickname = nickname;
this._nombreCompania = nombreCompania;
this._nombre = nombre;
this._apellido = apellido;
this._correo = correo;
this._imagen = null;
this._paginaWeb = paginaWeb;
this._fechaNacimiento = fechaNacimiento;
this._productos = productos;
}
public DataProveedor(String nickname,String nombreCompania,
String nombre, String apellido, String correo,
String paginaWeb, Date fechaNacimiento,
Hashtable<Integer, DataProducto> productos, Image imagen) {
this._nickname = nickname;
this._nombreCompania = nombreCompania;
this._nombre = nombre;
this._apellido = apellido;
this._correo = correo;
this._imagen = imagen;
this._paginaWeb = paginaWeb;
this._fechaNacimiento = fechaNacimiento;
this._productos = productos;
}
public String getNickname() {
return _nickname;
}
public String getNombreCompania() {
return _nombreCompania;
}
public String getNombre() {
return _nombre;
}
public String getApellido() {
return _apellido;
}
public String getCorreo() {
return _correo;
}
public Image getImagen() {
return _imagen;
}
public String getPaginaWeb() {
return _paginaWeb;
}
public Date getFechaNacimiento() {
return _fechaNacimiento;
}
public Hashtable<Integer, DataProducto> getProductos() {
return _productos;
}
** 版本信息 **
@Override
public DataProveedor VerInformacionProveedor() {
return _proveedor.GetDataProveedor();
}
** GetDataProveedor **
public DataProveedor GetDataProveedor()
{
Hashtable<Integer, DataProducto>productos = new Hashtable<Integer, DataProducto>();
for(Producto p : _productos.values())
{
DataProducto ip = p.GetInfo();
productos.put(new Integer(ip.get_id()), ip);
}
DataProveedor dp;
if(this._imagen == null)
dp = new DataProveedor(GetNickname(),GetNombreCompania(),GetNombre(),GetApellido(),
GetCorreo(),GetPaginaWeb(),GetFechaNacimiento(),productos);
else
dp = new DataProveedor(GetNickname(),GetNombreCompania(),GetNombre(),GetApellido(),GetCorreo(),
GetPaginaWeb(),GetFechaNacimiento(),productos,this._imagen.getImagen());
return dp;
}
** DataProveedor **
public DataProveedor(String nickname, String nombreCompania,
String nombre, String apellido, String correo,
String paginaWeb, Date fechaNacimiento,
Hashtable<Integer, DataProducto> productos) {
this._nickname = nickname;
this._nombreCompania = nombreCompania;
this._nombre = nombre;
this._apellido = apellido;
this._correo = correo;
this._imagen = null;
this._paginaWeb = paginaWeb;
this._fechaNacimiento = fechaNacimiento;
this._productos = productos;
}
public DataProveedor(String nickname,String nombreCompania,
String nombre, String apellido, String correo,
String paginaWeb, Date fechaNacimiento,
Hashtable<Integer, DataProducto> productos, Image imagen) {
this._nickname = nickname;
this._nombreCompania = nombreCompania;
this._nombre = nombre;
this._apellido = apellido;
this._correo = correo;
this._imagen = imagen;
this._paginaWeb = paginaWeb;
this._fechaNacimiento = fechaNacimiento;
this._productos = productos;
}