public void driver(String ... args) {
	    // get instance of MilliTimer() for benchmarking
        MilliTimer timer = new MilliTimer();
        
        this.validateArgs(args);
        
        ApplicationWindow.clearData();
        
        // Open Database Connection
        try {
            Database.getInstance().openConnection();
        } catch (ClassNotFoundException | SQLException e1) {
            log.fatal("Failed to open database connection!", e1);
        }
        
        Notice notice = new Notice();
        
        // start timer
        timer.startTimer();
        
        // get instance of other helper objects
        //@ToDo: The Config object can be static. No need to instantiate.
        Config config = new Config("props/superD.properties");
        config.loadConfig("props/log4j.properties");
        log.info("\n\n");
        log.info("Starting program!");
        
        System.out.println(notice.get_superD_ascii());

        /**
         * Load Database Tables
         */
        try {
            CheckDupes check = new CheckDupes();
            Schema s = new Schema();
            String sqlSchema = s.getSchema();
            PreparedStatement psSchema = Database.getInstance().getConnection().prepareStatement(sqlSchema);
            try {
                log.info("Running schema update on db: " + Database.getInstance().getDbPath());
                psSchema.execute();
                log.info("Schema update complete!");
            } catch (Exception e) {
                e.printStackTrace();
            }

            
            
            if (args.length<1){
                Scanner in = new Scanner(System.in);
                System.out.println("Would you like to read from prop file or enter options now?");
                System.out.print("Enter 1 to enter configuration now, 2 to use existing prop file: ");
                int choice=2;
                choice = Integer.parseInt(in.next());
                if (choice == 1){
                    readSetup();
                }
                in.close(); // close resource
            }

            //Run Setup() to do main logic, make calls to Walk()
            setup();

            //DATABASE now filled with all file hashes; time to look for duplicates
            check.checkDupes();
            // ALL DONE! stop timer
            timer.stopTimer();
            log.info("Total Runtime: " + timer.getTime());
        } catch (Exception e) { // TODO get rid of this to narrow try/catch scope for improved exception handling/recovery. log out
            e.printStackTrace();
        }
        
        // Close database connection
        try {
            Database.getInstance().closeConnection();
        } catch (SQLException e) {
            log.warn("Failed to close database connection!", e);
        }
        
	}