Ignore:
Timestamp:
2010-11-29T08:24:10+01:00 (13 years ago)
Author:
bastiK
Message:

see #5559 - ExtendedDialog.showDialog() blocks when called in main thread, so move gui stuff to edt. This problem is highly system dependent (i could never reproduce it myself, but seems to be quite common)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r3675 r3679  
    55import static org.openstreetmap.josm.tools.I18n.trn;
    66
    7 import java.awt.EventQueue;
    87import java.awt.GridBagConstraints;
    98import java.awt.GridBagLayout;
     
    3029import javax.swing.JPanel;
    3130import javax.swing.JTextArea;
     31import javax.swing.SwingUtilities;
    3232
    3333import org.openstreetmap.josm.Main;
    34 import org.openstreetmap.josm.actions.AutoScaleAction;
    3534import org.openstreetmap.josm.data.AutosaveTask;
    3635import org.openstreetmap.josm.data.Preferences;
    37 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3836import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
    3937import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    250248        }
    251249
    252         if (AutosaveTask.PROP_AUTOSAVE_ENABLED.get()) {
    253             AutosaveTask autosaveTask = new AutosaveTask();
    254             List<File> unsavedLayerFiles = autosaveTask.getUnsavedLayersFiles();
    255             if (!unsavedLayerFiles.isEmpty()) {
    256                 System.err.println("autosave debug: unsavedLayerFiles="+unsavedLayerFiles);
    257                 ExtendedDialog dialog = new ExtendedDialog(
    258                         Main.parent,
    259                         tr("Unsaved osm data"),
    260                         new String[] {tr("Restore"), tr("Cancel"), tr("Discard")}
    261                 );
    262                 dialog.setContent(
    263                         trn("JOSM found {0} unsaved osm data layer. ",
    264                         "JOSM found {0} unsaved osm data layers. ", unsavedLayerFiles.size(), unsavedLayerFiles.size()) +
    265                         tr("It looks like JOSM crashed last time. Do you like to restore the data?"));
    266                 dialog.setButtonIcons(new String[] {"ok", "cancel", "dialogs/remove"});
    267                 int selection = dialog.showDialog().getValue();
    268                 System.err.println("autosave debug: user selection="+selection);
    269                 if (selection == 1) {
    270                     for (OsmDataLayer layer: autosaveTask.getUnsavedLayers()) {
    271                         Main.main.addLayer(layer);
     250        SwingUtilities.invokeLater(new Runnable() {
     251            public void run() {
     252                if (AutosaveTask.PROP_AUTOSAVE_ENABLED.get()) {
     253                    AutosaveTask autosaveTask = new AutosaveTask();
     254                    List<File> unsavedLayerFiles = autosaveTask.getUnsavedLayersFiles();
     255                    if (!unsavedLayerFiles.isEmpty()) {
     256                        System.err.println("autosave debug: unsavedLayerFiles="+unsavedLayerFiles);
     257                        ExtendedDialog dialog = new ExtendedDialog(
     258                                Main.parent,
     259                                tr("Unsaved osm data"),
     260                                new String[] {tr("Restore"), tr("Cancel"), tr("Discard")}
     261                        );
     262                        dialog.setContent(
     263                                trn("JOSM found {0} unsaved osm data layer. ",
     264                                "JOSM found {0} unsaved osm data layers. ", unsavedLayerFiles.size(), unsavedLayerFiles.size()) +
     265                                tr("It looks like JOSM crashed last time. Do you like to restore the data?"));
     266                        dialog.setButtonIcons(new String[] {"ok", "cancel", "dialogs/remove"});
     267                        int selection = dialog.showDialog().getValue();
     268                        System.err.println("autosave debug: user selection="+selection);
     269                        if (selection == 1) {
     270                            autosaveTask.recoverUnsavedLayers();
     271                        } else if (selection == 3) {
     272                            System.err.println("autosave debug: discard autosaved layers");
     273                            autosaveTask.dicardUnsavedLayers();
     274                            System.err.println("autosave debug: discard autosaved layers [DONE]");
     275                        }
    272276                    }
    273                     AutoScaleAction.autoScale("data");
    274                 } else if (selection == 3) {
    275                     System.err.println("autosave debug: discard autosaved layers");
    276                     autosaveTask.dicardUnsavedLayers();
    277                     System.err.println("autosave debug: discard autosaved layers [DONE]");
     277                    autosaveTask.schedule();
    278278                }
    279             }
    280             autosaveTask.schedule();
    281         }
    282 
    283 
    284         EventQueue.invokeLater(new Runnable() {
    285             public void run() {
     279               
    286280                main.postConstructorProcessCmdLine(args);
    287281            }
Note: See TracChangeset for help on using the changeset viewer.