@SuppressWarnings("serial")
	public ErrorGui(java.awt.Frame parent) {
	super(parent, "Haven error!", true);
	setMinimumSize(new Dimension(300, 100));
	setResizable(false);
	add(new JPanel() {{
	    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
	    add(new JLabel("An error has occurred!"));
	    add(status = new JLabel("Please wait..."));
	    add(new JPanel() {{
		setLayout(new FlowLayout());
		setAlignmentX(0);
		add(closebtn = new JButton("Close") {{
		    addActionListener(new ActionListener() {
			    public void actionPerformed(ActionEvent ev) {
				ErrorGui.this.dispose();
				synchronized(ErrorGui.this) {
				    done = true;
				    ErrorGui.this.notifyAll();
				}
			    }
			});
		}});
		add(detbtn = new JButton("Details >>>") {{
		    addActionListener(new ActionListener() {
			    public void actionPerformed(ActionEvent ev) {
				if(details.isVisible()) {
				    details.setVisible(false);
				    detbtn.setText("Details >>>");
				} else {
				    details.setVisible(true);
				    detbtn.setText("<<< Details");
				}
				ErrorGui.this.pack();
			    }
			});
		}});
	    }});
	    add(details = new JPanel() {{
		setLayout(new BorderLayout());
		setAlignmentX(0);
		setVisible(false);
		add(exbox = new JTextArea() {{
		    setEditable(false);
		}});
	    }});
	}});
	addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent ev) {
		    ErrorGui.this.dispose();
		    synchronized(ErrorGui.this) {
			done = true;
			ErrorGui.this.notifyAll();
		    }
		    reporter.interrupt();
		}
	    });
	pack();
    }