private synchronized void writeTile(RenderedImage levelImage, int tileX, int tileY, File levelDir) throws IOException { final Raster raster = levelImage.getTile(tileX, tileY); final File tileFile = new File(levelDir, tileX + "-" + tileY + ".raw"); final FileImageOutputStream stream = new FileImageOutputStream(tileFile); try { TiledFileOpImage.writeRawDataTile(raster, stream); stream.close(); } catch (Throwable t) { try { stream.close(); } catch (IOException e) { // ignore } tileFile.delete(); throw new IOException("Failed to write tile to " + tileFile, t); } }