public Launcher() throws IOException {
		super("Oberien view.Launcher");
		versions = OberienURL.getVersions();
		
		JMenuBar mb = new JMenuBar();
		JMenu options = new JMenu("Options");
		JMenuItem redownload = new JMenuItem("Redownload whole game");
		redownload.addActionListener(this);
		redownload.setActionCommand("redownload");
		options.add(redownload);
		mb.add(options);
		
		JMenu changelog = new JMenu("Changelog");
		JMenuItem[] changelogItem = new JMenuItem[versions.length];
		for (int i = 0; i < changelogItem.length; i++) {
			changelogItem[i] = new JMenuItem(versions[i]);
			changelog.add(changelogItem[i]);
			changelogItem[i].addActionListener(this);
			changelogItem[i].setActionCommand("version:"+versions[i]);
		}
		mb.add(changelog);
		
		setJMenuBar(mb);
		
		JLabel north = new JLabel("Oberien");
		north.setFont(new Font("Arial", Font.BOLD, 32));
		
		JPanel center = new JPanel();
		center.setLayout(new BoxLayout(center, BoxLayout.Y_AXIS));
		JLabel changes = new JLabel("Announcements");
		changes.setFont(new Font("Arial", Font.PLAIN, 20));
		center.add(changes);
		
		JTextPane changesPane = new JTextPane();
		changesPane.setEditable(false);
		changesPane.setContentType("text/html");
		changesPane.setText(OberienURL.getChanges());
		center.add(changesPane);
		
		JLabel statusL = new JLabel("Status");
		statusL.setFont(new Font("Arial", Font.PLAIN, 20));
		center.add(statusL);
		
		status = new JTextArea();
		status.setEditable(false);
		JScrollPane sp = new JScrollPane(status);
		vertical = sp.getVerticalScrollBar();
		center.add(sp);
		
		JPanel south = new JPanel();
		south.setLayout(new BoxLayout(south, BoxLayout.X_AXIS));
		status.append("Getting server version...\n");
		serverVersion = versions[0];
		
		status.append("Getting local version...\n");
		try {
			clientVersion = getClientVersion();
		} catch (FileNotFoundException e) {
			clientVersion = "No version found";
		}
		
		status.append("Server version: " + serverVersion + "\n");
		status.append("Local version:  " + clientVersion + "\n");
		
		update = !clientVersion.equals(serverVersion);
		versionLabel = new JLabel("Client: " + clientVersion + ";  Server: " + serverVersion + ";  " + (update ? "Update needed.   " : "Up to date.   "));
		if (update) {
			status.append("Update needed\n");
			versionLabel.setForeground(Color.RED);
		} else {
			status.append("Up to date\n");
			versionLabel.setForeground(new Color(0,154,0));
		}
		south.add(versionLabel);
		
		if (update) {
			updateButton = new JButton("Update");
			updateButton.addActionListener(this);
			south.add(updateButton);
		}
		
		JButton start = new JButton("Start");
		start.addActionListener(this);
		south.add(start);
		
		
		add(north, BorderLayout.NORTH);
		add(center, BorderLayout.CENTER);
		add(south, BorderLayout.SOUTH);
		
		pack();
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}