public BugReportWindow(Throwable e)
	{
		_instance = this;

		_instance.setSize(450, 360); 	// 394 x 297 (inner)
		_instance.setResizable(false);
		_instance.setLayout(null);
		_instance.setBackground(new Color(0xF0F0F0));
		_instance.setTitle("Bug Reporter");
		_instance.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		_instance.setLocation(screen.width/2 - getWidth()/2, screen.height/2 - getHeight()/2);

		JEditorPane titleContainer 		= new JEditorPane();
		JEditorPane exceptionContainer	= new JEditorPane();
		JEditorPane messageContainer 	= new JEditorPane();
		final JCheckBox checkbox 		= new JCheckBox("Tell developers about the bug", true);
		final JButton detailsButton 	= new JButton("Details...");
		final JTextArea commentPanel 	= new JTextArea(defaultComment);
		final JScrollPane commentScroller = new JScrollPane(commentPanel);
		JButton close					= new JButton("Close");
		Font titleFont 					= new Font(Settings.FONT, Font.BOLD, 11);
		Font textFont					= new Font(Settings.FONT, Font.PLAIN, 10);
		Font exceptionFont				= new Font(Settings.FONT, Font.PLAIN, 9);
		String titleCSSRule				= "body { font-family: " + titleFont.getFamily() + "; font-size: " + titleFont.getSize() + "px; }";
		String textCSSRule				= "body { font-family: " + textFont.getFamily() + ";  font-size: " + textFont.getSize() + "px; }";
		String exceptionCSSRule			= "body { font-family: " + exceptionFont.getFamily() + ";  font-size: " + exceptionFont.getSize() + "px; }";
		
		String title = "<b>" + Settings.CURRENT_PROGRAM_NAME + " has encountered a bug</b>";
		titleContainer.setBounds(MARGIN, 10, getWidth() - 2 * MARGIN, 35);
		titleContainer.setContentType("text/html");
		titleContainer.setText(title);
		titleContainer.setOpaque(true);
		titleContainer.setBackground(new Color(240,240,240,0));
		titleContainer.setEditable(false);
		titleContainer.setVisible(true);
		((HTMLDocument)titleContainer.getDocument()).getStyleSheet().addRule(titleCSSRule);
		titleContainer.addMouseListener(new MouseListener() {
			@Override public void mouseReleased(MouseEvent e) {
				_instance.invalidate();
				_instance.repaint();
			}
			@Override public void mousePressed(MouseEvent e) { }
			@Override public void mouseExited(MouseEvent e) { }
			@Override public void mouseEntered(MouseEvent e) { }
			@Override public void mouseClicked(MouseEvent e) { }
		});

		String exception = "<center><i>" + getSimpleClassAndMsg(e) + "</i></center>";
		exceptionContainer.setBounds(MARGIN, 45, getWidth() - 2 * MARGIN, 75);
		exceptionContainer.setContentType("text/html");
		exceptionContainer.setText(exception);
		exceptionContainer.setOpaque(true);
		exceptionContainer.setBackground(new Color(240,240,240,0));
		exceptionContainer.setEditable(false);
		exceptionContainer.setVisible(true);
		((HTMLDocument)exceptionContainer.getDocument()).getStyleSheet().addRule(exceptionCSSRule);
		exceptionContainer.addMouseListener(new MouseListener() {
			@Override public void mouseReleased(MouseEvent e) {
				_instance.invalidate();
				_instance.repaint();
			}
			@Override public void mousePressed(MouseEvent e) { }
			@Override public void mouseExited(MouseEvent e) { }
			@Override public void mouseEntered(MouseEvent e) { }
			@Override public void mouseClicked(MouseEvent e) { }
		});
		
		String  message  = "Continued use of the tool may cause stability issues.<br />";
				message += "It is recommended that you close the tool and try again.";
		messageContainer.setBounds(MARGIN, 120, getWidth() - 2 * MARGIN, 55);
		messageContainer.setContentType("text/html");
		messageContainer.setText(message);
		messageContainer.setOpaque(true);
		messageContainer.setBackground(new Color(240,240,240,0));
		messageContainer.setEditable(false);
		messageContainer.setVisible(true);
		((HTMLDocument)messageContainer.getDocument()).getStyleSheet().addRule(textCSSRule);
		messageContainer.addMouseListener(new MouseListener() {
			@Override public void mouseReleased(MouseEvent e) {
				_instance.invalidate();
				_instance.repaint();
			}
			@Override public void mousePressed(MouseEvent e) { }
			@Override public void mouseExited(MouseEvent e) { }
			@Override public void mouseEntered(MouseEvent e) { }
			@Override public void mouseClicked(MouseEvent e) { }
		});

		checkbox.setBounds(MARGIN, 175, getWidth() - 2 * MARGIN - 100, 25);
		checkbox.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent arg0) {
				if( checkbox.isSelected() ) {
					CLOSE_OPTION = YES_OPTION;
					detailsButton.setEnabled(true);
					commentPanel.setEnabled(true);
					commentScroller.setEnabled(true);
				} else {
					CLOSE_OPTION = NO_OPTION;
					detailsButton.setEnabled(false);
					commentPanel.setEnabled(false);
					commentScroller.setEnabled(false);
				}
			}
		});
		checkbox.setVisible(true);
		checkbox.setSelected(true);
		
		detailsButton.setBounds(getWidth() - 100 - MARGIN, 175, 100, 25);
		detailsButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					if( getLogFile(STDERR).exists() )
						LaunchUtils.open(getLogFile(STDERR).getAbsolutePath());
				} catch (Exception e) {
					trace(STDERR, e);
				}
			}
		});
		detailsButton.setEnabled(true);
		detailsButton.setVisible(true);
		
		commentPanel.addFocusListener(new FocusListener() {
			@Override
			public void focusLost(FocusEvent arg0) {
				if( commentPanel.getText().trim().length() == 0 )
					commentPanel.setText(defaultComment);
			}
			@Override
			public void focusGained(FocusEvent arg0) {
				if( commentPanel.getText().trim().equals(defaultComment) )
					commentPanel.setText("");
			}
		});
		
		commentScroller.setBounds(MARGIN, 205, getWidth() - 2 * MARGIN, 75);
		commentScroller.setVisible(true);
		
		close.setBounds(getWidth() / 2 - 50, 290, 100, 25);
		close.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				closedWithButton = true;
				if( checkbox.isSelected() )
					data.comment = commentPanel.getText();
				
				dispatchEvent(new WindowEvent(_instance, WindowEvent.WINDOW_CLOSING));
			}
		});
		close.setEnabled(true);
		close.setVisible(true);
		
		_instance.add(titleContainer);
		_instance.add(exceptionContainer);
		_instance.add(messageContainer);
		_instance.add(detailsButton);
		_instance.add(checkbox);
		_instance.add(commentScroller);
		_instance.add(close);
		
		_instance.addWindowListener(new WindowListener() {
			@Override public void windowOpened(WindowEvent arg0) { }
			@Override public void windowIconified(WindowEvent arg0) { }
			@Override public void windowDeiconified(WindowEvent arg0) { }
			@Override public void windowDeactivated(WindowEvent arg0) {	}
			@Override public void windowClosing(WindowEvent arg0) {
				if( closedWithButton && !checkbox.isSelected() ) {
					CLOSE_OPTION = NO_OPTION;
				}
			}
			@Override public void windowClosed(WindowEvent arg0) { }
			@Override public void windowActivated(WindowEvent arg0) { }
		});
	}