One of the other constructors for ImageIcon allows you to make an ImageIcon from a byte[] array. So, can you get bytes from a zip file? From a quick browse of the API, this should work: ByteArrayOutputStream out = new ByteArrayOutputStream(); ZipFile zf = new ZipFile(fileName); ZipEntry entry = zf.getEntry(pathInFile); InputStream in = zf.getInputStream(entry); byte[] buffer = new byte[4096]; for (int ...