/**
  * @param onLogin If the login is successful, this will be executed on the Swing GUI thread (so
  *     don't do too much in it)
  */
 public void showLogin(final Runnable onLogin) {
   SwingUtilities.invokeLater(
       new CatchingRunnable() {
         public void doRun() throws Exception {
           LoginSheet lp = new LoginSheet(RobonoboFrame.this, onLogin);
           showSheet(lp);
         }
       });
 }
 public void showAbout() {
   SwingUtilities.invokeLater(
       new CatchingRunnable() {
         public void doRun() throws Exception {
           AboutSheet ap = new AboutSheet(RobonoboFrame.this);
           showSheet(ap);
         }
       });
 }
 public void showWelcome(boolean forceShow) {
   // If we have no shares (or we're forcing it), show the welcome dialog
   final boolean gotShares = (control.getShares().size() > 0);
   if (forceShow || (!gotShares && guiConfig.getShowWelcomePanel())) {
     SwingUtilities.invokeLater(
         new CatchingRunnable() {
           public void doRun() throws Exception {
             showSheet(new WelcomeSheet(RobonoboFrame.this));
           }
         });
   }
 }