private void showErrorMessage(Exception e) {
		ErrorMessage m = ErrorMessageFactory.createErrorMessage(e, this);
		clearAllContent();
		if (m != null) {
			StyledDocument doc = getStyledDocument();
			for (int i = 0, n = m.getStrings().length; i < n; i++) {
				try {
					doc.insertString(doc.getLength(), m.getStrings()[i], m.getStyles()[i]);
				} catch (BadLocationException ble) {
					ble.printStackTrace();
				}
				SimpleAttributeSet sas = new SimpleAttributeSet();
				sas.addAttribute(StyleConstants.Alignment, new Integer(StyleConstants.ALIGN_LEFT));
				doc.setParagraphAttributes(doc.getLength() - 1, 1, sas, false);
			}
		} else {
			StackTraceElement[] ste = e.getStackTrace();
			StringBuffer sb = new StringBuffer("Error message:\n\n");
			for (int i = 0; i < ste.length; i++)
				sb.append(ste[i] + "\n");
			setText(sb.toString());
		}
		if (navigator != null)
			navigator.reportDeadLink(pageAddress);
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				notifyPageListeners(new PageEvent(Page.this, PageEvent.LOAD_ERROR, "loading error"));
				notifyPageListeners(new PageEvent(Page.this, PageEvent.PAGE_READ_END));
			}
		});
	}