private void launch() { try { final Instance instance = launcher.getInstances().get(instancesTable.getSelectedRow()); boolean update = updateCheck.isSelected() && instance.isUpdatePending(); // Store last access date Date now = new Date(); instance.setLastAccessed(now); Persistence.commitAndForget(instance); // Perform login final Session session = LoginDialog.showLoginRequest(this, launcher); if (session == null) { return; } // If we have to update, we have to update if (!instance.isInstalled()) { update = true; } if (update) { // Execute the updater Updater updater = new Updater(launcher, instance); updater.setOnline(session.isOnline()); ObservableFuture<Instance> future = new ObservableFuture<Instance>( launcher.getExecutor().submit(updater), updater); // Show progress ProgressDialog.showProgress( this, future, _("launcher.updatingTitle"), _("launcher.updatingStatus", instance.getTitle())); SwingHelper.addErrorDialogCallback(this, future); // Update the list of instances after updating future.addListener(new Runnable() { @Override public void run() { instancesModel.update(); } }, SwingExecutor.INSTANCE); // On success, launch also Futures.addCallback(future, new FutureCallback<Instance>() { @Override public void onSuccess(Instance result) { launch(instance, session); } @Override public void onFailure(Throwable t) { } }, SwingExecutor.INSTANCE); } else { launch(instance, session); } } catch (ArrayIndexOutOfBoundsException e) { SwingHelper.showErrorDialog(this, _("launcher.noInstanceError"), _("launcher.noInstanceTitle")); } }
private void initComponents() { webView = WebpagePanel.forURL(launcher.getNewsURL(), false); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, instanceScroll, webView); configureFeaturesCheck.setSelected(false); instancesTable.setModel(instancesModel); launchButton.setFont(launchButton.getFont().deriveFont(Font.BOLD)); splitPane.setDividerLocation(200); splitPane.setDividerSize(4); SwingHelper.flattenJSplitPane(splitPane); buttonsPanel.addElement(refreshButton); buttonsPanel.addElement(configureFeaturesCheck); buttonsPanel.addGlue(); buttonsPanel.addElement(optionsButton); buttonsPanel.addElement(launchButton); container.setLayout(new BorderLayout()); container.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); container.add(splitPane, BorderLayout.CENTER); add(buttonsPanel, BorderLayout.SOUTH); add(container, BorderLayout.CENTER); instancesModel.addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { if (instancesTable.getRowCount() > 0) { instancesTable.setRowSelectionInterval(0, 0); } } }); instancesTable.addMouseListener(new DoubleClickToButtonAdapter(launchButton)); refreshButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { loadInstances(); checkLauncherUpdate(); } }); optionsButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showOptions(); } }); launchButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { launch(); } }); instancesTable.addMouseListener(new PopupMouseAdapter() { @Override protected void showPopup(MouseEvent e) { int index = instancesTable.rowAtPoint(e.getPoint()); Instance selected = null; if (index >= 0) { instancesTable.setRowSelectionInterval(index, index); selected = launcher.getInstances().get(index); } popupInstanceMenu(e.getComponent(), e.getX(), e.getY(), selected); } }); }
private void launch() { boolean offlineOnly = false; if(LauncherFrame.this.updateUrl != null) { SwingHelper.showMessageDialog( LauncherFrame.this, _("launcher.selfUpdateComplete"), _("errors.launchImpossible"), null, JOptionPane.ERROR_MESSAGE); return; } if(LauncherFrame.this.updateRequired) { offlineOnly = true; if(!SwingHelper.confirmDialog( LauncherFrame.this, _("errors.offlineOnly"), _("errors.genericError"))) return; } try { final Instance instance = launcher.getInstances().get(instancesTable.getSelectedRow()); // Store last access date Date now = new Date(); instance.setLastAccessed(now); Persistence.commitAndForget(instance); // Perform login final Session session = offlineOnly ? (new OfflineSession(launcher.getProperties().getProperty("offlinePlayerName"))) : LoginDialog.showLoginRequest(this, launcher); if (session == null) { return; } // Execute the updater Updater updater = new Updater(launcher, instance); updater.setSelectFeatures(configureFeaturesCheck.isSelected()); updater.setOnline(session.isOnline()); ObservableFuture<Instance> future = new ObservableFuture<Instance>( launcher.getExecutor().submit(updater), updater); // Show progress ProgressDialog.showProgress( this, future, _("launcher.updatingTitle"), _("launcher.updatingStatus", instance.getTitle())); SwingHelper.addErrorDialogCallback(this, future); // Update the list of instances after updating future.addListener(new Runnable() { @Override public void run() { instancesModel.update(); } }, SwingExecutor.INSTANCE); // On success, launch also Futures.addCallback(future, new FutureCallback<Instance>() { @Override public void onSuccess(Instance result) { launch(instance, session); } @Override public void onFailure(Throwable t) { } }, SwingExecutor.INSTANCE); } catch (ArrayIndexOutOfBoundsException e) { SwingHelper.showErrorDialog(this, _("launcher.noInstanceError"), _("launcher.noInstanceTitle")); } }