water = ImageIO.read(new File("src/icones/water.png"));
catch (IOException e)
images = new BufferedImage;
images = water;
System.exit is, for reasons which are hard to explain, treated by the compiler like a method which may return. Because of this, it believes it's possible to leave that catch block and use
water before it's initialized.
You should probably just throw an exception
throw new RuntimeException(e); after your
System.exit call to make the compiler happy.