void start() {
        Runnable run = new Runnable() {
            @Override
            public void run() {
                try {
                    //frame.setState(Frame.ICONIFIED);
                    frame.dispose();
                    
                    final String javaBin = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
                    final File currentJar = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI());

                    /* is it a jar file? */
                    if(currentJar.getName().endsWith(".jar")) {
                        String path = currentJar.getAbsolutePath();
                        //JOptionPane.showMessageDialog(frame, "Path: " + path);
                        download(downloadURL, path);

                        /* Build command: java -jar application.jar */
                        final ArrayList<String> command = new ArrayList<String>();
                        command.add(javaBin);
                        command.add("-jar");
                        command.add(currentJar.getPath());

                        final ProcessBuilder builder = new ProcessBuilder(command);
                        logger.log(Level.FINE, "Attempting to restart via " + command + ", bye");
                        builder.start();
                    } else {
                        logger.log(Level.WARNING, "Don't know how to restart <" + currentJar + ">, exiting");
                    }
                    
                } catch (IOException ex) {
                    logger.log(Level.SEVERE, "Restarting jar failed:", ex);
                } catch (URISyntaxException ex) {
                    logger.log(Level.SEVERE, "Restarting jar failed:", ex);
                } finally {
                    dispose();
                }
            }
        };
        Thread t = new Thread(run);
        t.setName("FDownload: Update download");
        t.start();
    }