Mensagem gráfica de erro com stack trace

Alguem ae sabe uma forma legal de fazer uma mensagem grafica de erro onde eu tenha um botão detalhes para ver o stack do erro? Pode ser estilho JOptionPane?

Eu uso assim:

	public static void show(Component parent, Object err) {
		
		Object obj = null;

		if (err instanceof Exception) {
			Exception e = (Exception) err;

			ByteArrayOutputStream ba = new ByteArrayOutputStream();
			PrintWriter pw = new PrintWriter(ba);

			e.printStackTrace();

			e.printStackTrace(pw);

			pw.close();

			JTextArea txt1 = new JTextArea(e.toString());
			JTextArea txt2 = new JTextArea(ba.toString());

			txt1.setEditable(false);
			txt1.setLineWrap(true);
			txt1.setWrapStyleWord(true);
			txt2.setEditable(false);

			txt1.setOpaque(false);
			txt2.setOpaque(false);

			JTabbedPane pnlTab = new JTabbedPane();
			pnlTab.setPreferredSize(new Dimension(500, 250));
			pnlTab.add("Error", new JScrollPane(txt1));
			pnlTab.add("Details", new JScrollPane(txt2));
			
			obj = pnlTab;
		} else
			obj = err;

		JOptionPane.showMessageDialog(parent, obj, "Error", JOptionPane.ERROR_MESSAGE);
	}