code: @Override
  	final public void run() {
  		try {
  			if(args.length>0) handleCommand(args);
  			else runImpl();
  			status="Done";
  		} catch(IOException exception) {
  			this.err.println(getName()+": "+exception.getMessage());
  			status="IO Error: "+exception.getMessage();
  			this.err.flush();
  		} catch(SQLException exception) {
  			this.err.println(getName()+": "+exception.getMessage());
  			status="SQL Error: "+exception.getMessage();
  			this.err.flush();
  		} catch(ThreadDeath TD) {
  			throw TD;
  		} catch(Throwable T) {
  			ErrorPrinter.printStackTraces(T, this.err);
  			status="Error: "+T.toString();
  			this.err.flush();
  		} finally {
  			if(Thread.currentThread()==thread) thread=null;
  		}
  	}
docs: If arguments were provided, executes that command.  Otherwise,
  reads from <code>in</code> until end of file or <code>exit</code>.