[Schmitzm-commits] r861 - trunk/src/schmitzm/swing

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Sat May 22 00:01:14 CEST 2010


Author: alfonx
Date: 2010-05-22 00:01:13 +0200 (Sat, 22 May 2010)
New Revision: 861

Modified:
   trunk/src/schmitzm/swing/ExceptionDialog.java
Log:
Made ExceptionDialog.show(...) NOT create a Dialog if running in headless environments. In headless environments, the exception is printed to console.

		if (GraphicsEnvironment.isHeadless())
			err.printStackTrace();
		else
		  ...

Modified: trunk/src/schmitzm/swing/ExceptionDialog.java
===================================================================
--- trunk/src/schmitzm/swing/ExceptionDialog.java	2010-05-21 15:16:06 UTC (rev 860)
+++ trunk/src/schmitzm/swing/ExceptionDialog.java	2010-05-21 22:01:13 UTC (rev 861)
@@ -32,6 +32,7 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Frame;
+import java.awt.GraphicsEnvironment;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
@@ -46,232 +47,294 @@
 import schmitzm.lang.LangUtil;
 
 /**
- * Diese Klasse stellt eine modale Fehler-Meldung dar. Diese besteht neben
- * einer Meldung aus einem Text-Feld, in dem der StackTrace des Fehlers
- * angezeigt wird.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * Diese Klasse stellt eine modale Fehler-Meldung dar. Diese besteht neben einer
+ * Meldung aus einem Text-Feld, in dem der StackTrace des Fehlers angezeigt
+ * wird.
+ * 
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ *         (University of Bonn/Germany)
  * @version 1.0
  */
 public class ExceptionDialog extends JDialog {
-  /** Speichert den angezeigten Fehler. */
-  protected Throwable err = null;
-  /** Label in dem die Meldung angezeigt wird. */
-  protected JLabel  messageLabel = null;
-  /** Button um den Dialog zu schliessen. */
-  protected JButton okButton = null;
-  /** Button um Details anzuzeigen. */
-  protected JToggleButton detailsButton = null;
-  /** Button um die Exception in die Zwischenablage zu kopieren. */
-  protected JButton copyToClipboardButton = null;
-  /** Button um die Exception auf die Console zu kopieren. */
-  protected JButton copyToConsoleButton = null;
-  /** Bereich, in dem die Details angezeigt werden. */
-  protected JTextArea detailsTextArea = null;
-  /** ScrollPane, in dem sich die TextArea fuer die Details befinden. */
-  protected JScrollPane detailsScrollPane = null;
-  /** Verbindung zwischen StackTrace-PrintStream und TextArea*/
-  private TextAreaPrintStream detailsPrintStream= null;
+	/** Speichert den angezeigten Fehler. */
+	protected Throwable err = null;
+	/** Label in dem die Meldung angezeigt wird. */
+	protected JLabel messageLabel = null;
+	/** Button um den Dialog zu schliessen. */
+	protected JButton okButton = null;
+	/** Button um Details anzuzeigen. */
+	protected JToggleButton detailsButton = null;
+	/** Button um die Exception in die Zwischenablage zu kopieren. */
+	protected JButton copyToClipboardButton = null;
+	/** Button um die Exception auf die Console zu kopieren. */
+	protected JButton copyToConsoleButton = null;
+	/** Bereich, in dem die Details angezeigt werden. */
+	protected JTextArea detailsTextArea = null;
+	/** ScrollPane, in dem sich die TextArea fuer die Details befinden. */
+	protected JScrollPane detailsScrollPane = null;
+	/** Verbindung zwischen StackTrace-PrintStream und TextArea */
+	private TextAreaPrintStream detailsPrintStream = null;
 
-  /**
-   * Erzeugt einen neuen Fehler-Dialog. Dem Dialog wird zunaechst noch keine
-   * Fehlermeldung zugeordnet.
-   * @param parent   uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @see #setError(Throwable)
-   */
-  public ExceptionDialog(Component parent) {
-    this(parent,null,null,null);
-  }
+	/**
+	 * Erzeugt einen neuen Fehler-Dialog. Dem Dialog wird zunaechst noch keine
+	 * Fehlermeldung zugeordnet.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @see #setError(Throwable)
+	 */
+	public ExceptionDialog(Component parent) {
+		this(parent, null, null, null);
+	}
 
-  /**
-   * Erzeugt einen neuen Fehler-Dialog. Der Dialog wird relativ zum Parent-Fenster
-   * zentriert.
-   * @param parent   uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @param err      darzustellender Fehler
-   */
-  public ExceptionDialog(Component parent, Throwable err) {
-    this(parent,err,null,null);
-  }
+	/**
+	 * Erzeugt einen neuen Fehler-Dialog. Der Dialog wird relativ zum
+	 * Parent-Fenster zentriert.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @param err
+	 *            darzustellender Fehler
+	 */
+	public ExceptionDialog(Component parent, Throwable err) {
+		this(parent, err, null, null);
+	}
 
-  /**
-   * Erzeugt einen neuen Fehler-Dialog. Der Dialog wird relativ zum Parent-Fenster
-   * zentriert.
-   * @param parent     uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @param err        darzustellender Fehler
-   * @param title      Titel fuer das Fenster (kann <code>null</code> sein!)
-   * @param errMessage Meldung, die zu dem Fehler angezeigt angezeigt wird
-   *                   (kann <code>null</code> sein!)
-   */
-  public ExceptionDialog(Component parent, Throwable err, String title, String errMessage) {
-    this(parent,err,title,errMessage,false);
-  }
-  
-  /**
-   * Erzeugt einen neuen Fehler-Dialog. Der Dialog wird relativ zum Parent-Fenster
-   * zentriert.
-   * @param parent     uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @param err        darzustellender Fehler
-   * @param title      Titel fuer das Fenster (kann <code>null</code> sein!)
-   * @param errMessage Meldung, die zu dem Fehler angezeigt angezeigt wird
-   *                   (kann <code>null</code> sein!)
-   * @param showDetails wenn {@code true} werden die Details initial angezeigt
-   */
-  public ExceptionDialog(Component parent, Throwable err, String title, String errMessage, boolean showDetails) {
-    super((Frame)null,true);
-    if ( err != null && (title==null || title.trim().equals("")) )
-      title = err.getClass().getSimpleName();
-    if ( err != null && (errMessage==null || errMessage.trim().equals("")) )
-      errMessage = err.getMessage();
+	/**
+	 * Erzeugt einen neuen Fehler-Dialog. Der Dialog wird relativ zum
+	 * Parent-Fenster zentriert.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @param err
+	 *            darzustellender Fehler
+	 * @param title
+	 *            Titel fuer das Fenster (kann <code>null</code> sein!)
+	 * @param errMessage
+	 *            Meldung, die zu dem Fehler angezeigt angezeigt wird (kann
+	 *            <code>null</code> sein!)
+	 */
+	public ExceptionDialog(Component parent, Throwable err, String title,
+			String errMessage) {
+		this(parent, err, title, errMessage, false);
+	}
 
-    // Vorlagen-Dialog erzeugen
-    this.err                   = err;
-    this.messageLabel          = new JLabel(errMessage);
-    this.okButton              = new JButton( SwingUtil.RESOURCE.getString("Ok") );
-    this.copyToConsoleButton   = new JButton( SwingUtil.RESOURCE.getString("ExceptionDialog.CopyToConsole") );
-    this.copyToClipboardButton = new JButton( SwingUtil.RESOURCE.getString("ExceptionDialog.CopyToClipboard") );
-    this.detailsButton         = new JToggleButton( SwingUtil.RESOURCE.getString("Details"), showDetails );
-    this.detailsTextArea       = new JTextArea(10,60);
-    this.detailsTextArea.setEditable(false);
-    this.detailsPrintStream    = new TextAreaPrintStream(detailsTextArea);
-    this.detailsScrollPane     = new JScrollPane(detailsTextArea);
-    this.detailsScrollPane.setVisible(showDetails);
-    this.setError(err);
-    JOptionPane  pane = new JOptionPane(
-      messageLabel,
-      JOptionPane.ERROR_MESSAGE,
-      JOptionPane.DEFAULT_OPTION,
-      null,
-      new Object[] {okButton, detailsButton, copyToConsoleButton, copyToClipboardButton}
-    );
-    JDialog dialog = pane.createDialog(parent,title);
+	/**
+	 * Erzeugt einen neuen Fehler-Dialog. Der Dialog wird relativ zum
+	 * Parent-Fenster zentriert.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @param err
+	 *            darzustellender Fehler
+	 * @param title
+	 *            Titel fuer das Fenster (kann <code>null</code> sein!)
+	 * @param errMessage
+	 *            Meldung, die zu dem Fehler angezeigt angezeigt wird (kann
+	 *            <code>null</code> sein!)
+	 * @param showDetails
+	 *            wenn {@code true} werden die Details initial angezeigt
+	 */
+	public ExceptionDialog(Component parent, Throwable err, String title,
+			String errMessage, boolean showDetails) {
+		super((Frame) null, true);
+		if (err != null && (title == null || title.trim().equals("")))
+			title = err.getClass().getSimpleName();
+		if (err != null && (errMessage == null || errMessage.trim().equals("")))
+			errMessage = err.getMessage();
 
-    // Dialog nach Vorlage initialisieren
-    this.setTitle( dialog.getTitle() );
-    this.setAlwaysOnTop(true); // Fehler soll auch oberhalb von "alwaysOnTop"-
-                               // Komponenten erscheinen
-    this.getContentPane().setLayout(new BorderLayout());
-    this.getContentPane().add(dialog.getContentPane(), BorderLayout.NORTH);
-    this.getContentPane().add(detailsScrollPane, BorderLayout.CENTER);
-//    this.setDefaultCloseOperation( DO_NOTHING_ON_CLOSE );
-    this.okButton.addActionListener( new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        setVisible(false);
-      }
-    } );
-    this.detailsButton.addActionListener( new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        detailsScrollPane.setVisible( detailsButton.isSelected() );
-        pack();
-      }
-    } );
-    this.copyToClipboardButton.addActionListener( new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        LangUtil.copyToClipboard( detailsTextArea.getText() );
-      }
-    } );
-    this.copyToConsoleButton.addActionListener( new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        if ( getError() != null )
-          getError().printStackTrace();
-      }
-    } );
+		// Vorlagen-Dialog erzeugen
+		this.err = err;
+		this.messageLabel = new JLabel(errMessage);
+		this.okButton = new JButton(SwingUtil.RESOURCE.getString("Ok"));
+		this.copyToConsoleButton = new JButton(SwingUtil.RESOURCE
+				.getString("ExceptionDialog.CopyToConsole"));
+		this.copyToClipboardButton = new JButton(SwingUtil.RESOURCE
+				.getString("ExceptionDialog.CopyToClipboard"));
+		this.detailsButton = new JToggleButton(SwingUtil.RESOURCE
+				.getString("Details"), showDetails);
+		this.detailsTextArea = new JTextArea(10, 60);
+		this.detailsTextArea.setEditable(false);
+		this.detailsPrintStream = new TextAreaPrintStream(detailsTextArea);
+		this.detailsScrollPane = new JScrollPane(detailsTextArea);
+		this.detailsScrollPane.setVisible(showDetails);
+		this.setError(err);
+		JOptionPane pane = new JOptionPane(messageLabel,
+				JOptionPane.ERROR_MESSAGE, JOptionPane.DEFAULT_OPTION, null,
+				new Object[] { okButton, detailsButton, copyToConsoleButton,
+						copyToClipboardButton });
+		JDialog dialog = pane.createDialog(parent, title);
 
-    pack();
-    SwingUtil.setRelativeFramePosition(this,SwingUtil.getParentWindow(parent),0.5,0.5);
-  }
+		// Dialog nach Vorlage initialisieren
+		this.setTitle(dialog.getTitle());
+		this.setAlwaysOnTop(true); // Fehler soll auch oberhalb von
+		// "alwaysOnTop"-
+		// Komponenten erscheinen
+		this.getContentPane().setLayout(new BorderLayout());
+		this.getContentPane().add(dialog.getContentPane(), BorderLayout.NORTH);
+		this.getContentPane().add(detailsScrollPane, BorderLayout.CENTER);
+		// this.setDefaultCloseOperation( DO_NOTHING_ON_CLOSE );
+		this.okButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				setVisible(false);
+			}
+		});
+		this.detailsButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				detailsScrollPane.setVisible(detailsButton.isSelected());
+				pack();
+			}
+		});
+		this.copyToClipboardButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				LangUtil.copyToClipboard(detailsTextArea.getText());
+			}
+		});
+		this.copyToConsoleButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if (getError() != null)
+					getError().printStackTrace();
+			}
+		});
 
-  /**
-   * Liefert die angezeigte Fehlermeldung.
-   */
-  public String getMessage() {
-    return  messageLabel.getText();
-  }
+		pack();
+		SwingUtil.setRelativeFramePosition(this, SwingUtil
+				.getParentWindow(parent), 0.5, 0.5);
+	}
 
-  /**
-   * Setzt die anzuzeigende Fehlermeldung.
-   */
-  public void setMessage(String mess) {
-    if ( mess == null || mess.trim().equals("") )
-      mess = getError() != null ? getError().getMessage() : SwingUtil.RESOURCE.getString("Error");
-    messageLabel.setText(mess);
-  }
+	/**
+	 * Liefert die angezeigte Fehlermeldung.
+	 */
+	public String getMessage() {
+		return messageLabel.getText();
+	}
 
-  /**
-   * Liefert den angezeigten Fehler.
-   */
-  public Throwable getError() {
-    return err;
-  }
+	/**
+	 * Setzt die anzuzeigende Fehlermeldung.
+	 */
+	public void setMessage(String mess) {
+		if (mess == null || mess.trim().equals(""))
+			mess = getError() != null ? getError().getMessage()
+					: SwingUtil.RESOURCE.getString("Error");
+		messageLabel.setText(mess);
+	}
 
-  /**
-   * Setzt den angezeigten Fehler.
-   */
-  public void setError(Throwable err) {
-    this.err = err;
-    if ( err == null )
-      detailsTextArea.setText("");
-    else
-      err.printStackTrace(detailsPrintStream);
-    detailsTextArea.select(0,0);
-  }
+	/**
+	 * Liefert den angezeigten Fehler.
+	 */
+	public Throwable getError() {
+		return err;
+	}
 
-  /**
-   * Zeigt einen Fehler-Dialog an.
-   * @param parent      uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @param err         darzustellender Fehler
-   * @param title       Titel fuer das Fenster (kann <code>null</code> sein!)
-   * @param errMessage  Meldung, die zu dem Fehler angezeigt angezeigt wird
-   *                    (kann <code>null</code> sein!)
-   */
-  public static void show(Component parent, Throwable err, String title, String errMessage) {
-    new ExceptionDialog(parent,err,title,errMessage).setVisible(true);
-  }
+	/**
+	 * Setzt den angezeigten Fehler.
+	 */
+	public void setError(Throwable err) {
+		this.err = err;
+		if (err == null)
+			detailsTextArea.setText("");
+		else
+			err.printStackTrace(detailsPrintStream);
+		detailsTextArea.select(0, 0);
+	}
 
-  /**
-   * Zeigt einen Fehler-Dialog an.
-   * @param parent   uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @param err      darzustellender Fehler
-   */
-  public static void show(Component parent, Throwable err) {
-    new ExceptionDialog(parent,err).setVisible(true);
-  }
+	/**
+	 * Zeigt einen Fehler-Dialog an.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @param err
+	 *            darzustellender Fehler
+	 * @param title
+	 *            Titel fuer das Fenster (kann <code>null</code> sein!)
+	 * @param errMessage
+	 *            Meldung, die zu dem Fehler angezeigt angezeigt wird (kann
+	 *            <code>null</code> sein!)
+	 */
+	public static void show(Component parent, Throwable err, String title,
+			String errMessage) {
+		if (GraphicsEnvironment.isHeadless())
+			err.printStackTrace();
+		else
+			new ExceptionDialog(parent, err, title, errMessage)
+					.setVisible(true);
+	}
 
-  /**
-   * Zeigt einen Fehler-Dialog an.
-   * @param err darzustellender Fehler
-   */
-  public static void show(Throwable err) {
-    new ExceptionDialog(null,err).setVisible(true);
-  }
+	/**
+	 * Zeigt einen Fehler-Dialog an.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @param err
+	 *            darzustellender Fehler
+	 */
+	public static void show(Component parent, Throwable err) {
+		if (GraphicsEnvironment.isHeadless())
+			err.printStackTrace();
+		else
+			new ExceptionDialog(parent, err).setVisible(true);
+	}
 
-  /**
-   * Zeigt einen Fehler-Dialog an.
-   * @param parent      uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @param err         darzustellender Fehler
-   * @param title       Titel fuer das Fenster (kann <code>null</code> sein!)
-   * @param errMessage  Meldung, die zu dem Fehler angezeigt angezeigt wird
-   *                    (kann <code>null</code> sein!)
-   * @param showDetails wenn {@code true} werden die Details initial angezeigt
-   */
-  public static void show(Component parent, Throwable err, String title, String errMessage, boolean showDetails) {
-    new ExceptionDialog(parent,err,title,errMessage,showDetails).setVisible(true);
-  }
+	/**
+	 * Zeigt einen Fehler-Dialog an.
+	 * 
+	 * @param err
+	 *            darzustellender Fehler
+	 */
+	public static void show(Throwable err) {
+		if (GraphicsEnvironment.isHeadless())
+			err.printStackTrace();
+		else
+			new ExceptionDialog(null, err).setVisible(true);
+	}
 
-  /**
-   * Zeigt einen Fehler-Dialog an.
-   * @param parent   uebergeordnetes Fenster (kann <code>null</code> sein!)
-   * @param err      darzustellender Fehler
-   * @param showDetails wenn {@code true} werden die Details initial angezeigt
-   */
-  public static void show(Component parent, Throwable err, boolean showDetails) {
-    show(parent,err,null,null,showDetails);
-  }
+	/**
+	 * Zeigt einen Fehler-Dialog an.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @param err
+	 *            darzustellender Fehler
+	 * @param title
+	 *            Titel fuer das Fenster (kann <code>null</code> sein!)
+	 * @param errMessage
+	 *            Meldung, die zu dem Fehler angezeigt angezeigt wird (kann
+	 *            <code>null</code> sein!)
+	 * @param showDetails
+	 *            wenn {@code true} werden die Details initial angezeigt
+	 */
+	public static void show(Component parent, Throwable err, String title,
+			String errMessage, boolean showDetails) {
+		if (GraphicsEnvironment.isHeadless())
+			err.printStackTrace();
+		else
+			new ExceptionDialog(parent, err, title, errMessage, showDetails)
+					.setVisible(true);
+	}
 
-  /**
-   * Zeigt einen Fehler-Dialog an.
-   * @param err darzustellender Fehler
-   * @param showDetails wenn {@code true} werden die Details initial angezeigt
-   */
-  public static void show(Throwable err, boolean showDetails) {
-    show(null,err,showDetails);
-  }
+	/**
+	 * Zeigt einen Fehler-Dialog an.
+	 * 
+	 * @param parent
+	 *            uebergeordnetes Fenster (kann <code>null</code> sein!)
+	 * @param err
+	 *            darzustellender Fehler
+	 * @param showDetails
+	 *            wenn {@code true} werden die Details initial angezeigt
+	 */
+	public static void show(Component parent, Throwable err, boolean showDetails) {
+		show(parent, err, null, null, showDetails);
+	}
+
+	/**
+	 * Zeigt einen Fehler-Dialog an.
+	 * 
+	 * @param err
+	 *            darzustellender Fehler
+	 * @param showDetails
+	 *            wenn {@code true} werden die Details initial angezeigt
+	 */
+	public static void show(Throwable err, boolean showDetails) {
+		show(null, err, showDetails);
+	}
 }



More information about the Schmitzm-commits mailing list