SystemInfoDialog(Modeler modeler) {

		super(modeler, "System Information", false);
		String s = Modeler.getInternationalText("SystemInfo");
		if (s != null)
			setTitle(s);

		final JTabbedPane tabbedPane = new JTabbedPane();
		getContentPane().add(BorderLayout.CENTER, tabbedPane);

		JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		getContentPane().add(panel, BorderLayout.SOUTH);

		s = Modeler.getInternationalText("Update");
		JButton button = new JButton(s != null ? s : "Update");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				switch (tabbedPane.getSelectedIndex()) {
				case 0:
					updateMemoryTable();
					break;
				case 1:
					break;
				case 2:
					updateThreadTableModel();
					break;
				}
			}
		});
		panel.add(button);

		s = Modeler.getInternationalText("CloseButton");
		button = new JButton(s != null ? s : "Close");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				SystemInfoDialog.this.dispose();
			}
		});
		panel.add(button);

		// JVM information
		s = Modeler.getInternationalText("VirtualMachine");
		tabbedPane.addTab("Java " + (s != null ? s : "Virtual Machine"), createJvmPanel());

		// MW information
		s = Modeler.getInternationalText("MolecularWorkbench");
		tabbedPane.addTab(s != null ? s : "Molecular Workbench", createMwPanel());

		// threads
		s = Modeler.getInternationalText("Thread");
		tabbedPane.addTab(s != null ? s : "Threads", createThreadPanel());

		pack();
		setLocationRelativeTo(modeler);

	}