private static List<ImageFileProvider> unrar (final File droppedFile) {
        final List<ImageFileProvider> providers = new ArrayList<ImageFileProvider> ();
        Archive archive = null;
        try {
            archive = new Archive (droppedFile);
            final List<FileHeader> headers = archive.getFileHeaders ();
            for (int i = 0; i < headers.size (); i++) {
                final int finalI = i;
                providers.add (new ImageFileProvider() {
                    @Override
                    public byte[] getImageFile () {
                        Archive archive = null;
                        try {
                            archive = new Archive (droppedFile);
                            final List<FileHeader> headers = archive.getFileHeaders ();
                            final FileHeader fh = headers.get (finalI);
                            
                            final ByteArrayOutputStream baos = new ByteArrayOutputStream ();
                            
                            try {
                                archive.extractFile (fh, baos);
                            } finally {
                                baos.close ();
                            }
                            return baos.toByteArray ();
                        } catch (RarException e) {
                            e.printStackTrace ();
                            return null;
                        } catch (IOException e) {
                            e.printStackTrace ();
                            return null;
                        } finally {
                            try {
                                if (null != archive) {
                                    archive.close ();
                                }
                            } catch (IOException e) {
                                e.printStackTrace ();
                                return null;
                            }
                        }
                    }
                });
            }
            return providers;
        } catch (RarException e) {
            e.printStackTrace ();
            return null;
        } catch (IOException e) {
            e.printStackTrace ();
            return null;
        } finally {
            try {
                if (null != archive) {
                    archive.close ();
                }
            } catch (IOException e) {
                e.printStackTrace ();
                return null;
            }
        }
    }