Hi all,
I have a incomprehensible problem. I have a java application wich manipulate images. This application works fine with a desktop environment but when I try to migrate it on production server (without X), a exception is catch...
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1279)
at FaceplateBuilder.fillImageByClients(FaceplateBuilder.java:95)
at FaceplateBuilder.createPack(FaceplateBuilder.java:68)
at FaceplateBuilder.run(FaceplateBuilder.java:39)
This is the following code...
File tmp = new File("/tmp/test.jpg");
BufferedImage in = ImageIO.read(tmp);
The file /tmp/test.jpg exist.
-----
Here are all tested solutions without success :
*I've tried to upgrade the java version (1.5.0_14 to 1.6.0_06). 1.6.0_06 is the desktop environment configuration.
* I read this page: [Using Headless Mode in the Java SE Platform|http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/] and I try to launch java with java.awt.headless=true variable.
* I have install the [X11 dev library|http://javatechniques.com/public/java/docs/hosting/headless-java-x11-libraries.html]. (apt-get install libice-dev libsm-dev libx11-dev libxp-dev libxt-dev libxtst-dev)
* I have changed the ImageIO code by following :
Image tmp = loadImageFile("/tmp/test.jpg");
BufferedImage in = toBufferedImage(tmp);
[...]
public static BufferedImage toBufferedImage(Image image) {
if (image instanceof BufferedImage) {
return ((BufferedImage) image);
} else {
BufferedImage bufferedImage = new BufferedImage(image
.getWidth(null), image.getHeight(null),
BufferedImage.TYPE_INT_RGB);
Graphics g = bufferedImage.createGraphics();
g.drawImage(image, 0, 0, Color.WHITE, null);
g.dispose();
return (bufferedImage);
}
}
public static Image loadImageFile(String imgFile) {
Image img = Toolkit.getDefaultToolkit().getImage(imgFile);
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(img, 0);
try {
mediaTracker.waitForID(0);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
return (img);
}
This code catches a new error...
java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:999)
at java.awt.image.BufferedImage.<init>(BufferedImage.java:314)
at FaceplateBuilder.toBufferedImage(FaceplateBuilder.java:122)
at FaceplateBuilder.fillImageByClients(FaceplateBuilder.java:95)
at FaceplateBuilder.createPack(FaceplateBuilder.java:73)
at FaceplateBuilder.run(FaceplateBuilder.java:44)
I think it's the same problem... The Image can't be loaded and I don't know why ! This problem make me crazy so I tried to post here.
Thanks in advance