Quellcode durchsuchen

fixes issue 1198: ErrorListDialog causes shutdown thread to hang

git-svn-id: http://svn.dmdirc.com/trunk@4001 00569f92-eb28-0410-84fd-f71c24880f
tags/0.6
Gregory Holmes vor 16 Jahren
Ursprung
Commit
d5f26d14b0

+ 70
- 41
src/com/dmdirc/ui/swing/dialogs/error/ErrorListDialog.java Datei anzeigen

19
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
  * SOFTWARE.
20
  * SOFTWARE.
21
  */
21
  */
22
-
23
 package com.dmdirc.ui.swing.dialogs.error;
22
 package com.dmdirc.ui.swing.dialogs.error;
24
 
23
 
25
 import com.dmdirc.ui.swing.components.renderers.ErrorLevelIconCellRenderer;
24
 import com.dmdirc.ui.swing.components.renderers.ErrorLevelIconCellRenderer;
222
 
221
 
223
         splitPane.setTopComponent(scrollPane);
222
         splitPane.setTopComponent(scrollPane);
224
         splitPane.setBottomComponent(panel);
223
         splitPane.setBottomComponent(panel);
225
-        
224
+
226
         splitPane.setDividerSize((int) PlatformDefaults.getPanelInsets(0).getValue());
225
         splitPane.setDividerSize((int) PlatformDefaults.getPanelInsets(0).getValue());
227
 
226
 
228
         getContentPane().add(splitPane);
227
         getContentPane().add(splitPane);
286
             /** {@inheritDoc} */
285
             /** {@inheritDoc} */
287
             @Override
286
             @Override
288
             public void run() {
287
             public void run() {
289
-                synchronized (tableModel) {
290
-                    final int selectedRow = table.getSelectedRow();
291
-                    tableModel.addRow(error);
292
-                    table.getSelectionModel().setSelectionInterval(selectedRow,
293
-                            selectedRow);
294
-                    deleteAllButton.setEnabled(true);
288
+                if (isReady()) {
289
+                    synchronized (tableModel) {
290
+                        final int selectedRow = table.getSelectedRow();
291
+                        tableModel.addRow(error);
292
+                        table.getSelectionModel().setSelectionInterval(selectedRow,
293
+                                selectedRow);
294
+                        deleteAllButton.setEnabled(true);
295
+                    }
295
                 }
296
                 }
296
             }
297
             }
297
-            });
298
+        });
298
     }
299
     }
299
 
300
 
300
     /** {@inheritDoc} */
301
     /** {@inheritDoc} */
301
     @Override
302
     @Override
302
     public void fatalError(final ProgramError error) {
303
     public void fatalError(final ProgramError error) {
303
-        new FatalErrorDialog(error);
304
+        SwingUtilities.invokeLater(new Runnable() {
305
+
306
+            /** {@inheritDoc} */
307
+            @Override
308
+            public void run() {
309
+                if (isReady()) {
310
+                    new FatalErrorDialog(error);
311
+                }
312
+            }
313
+        });
304
     }
314
     }
305
 
315
 
306
     /** {@inheritDoc} */
316
     /** {@inheritDoc} */
307
     @Override
317
     @Override
308
     public void errorDeleted(final ProgramError error) {
318
     public void errorDeleted(final ProgramError error) {
309
-        synchronized (tableModel) {
310
-            int selectedRow = table.getSelectedRow();
311
-            tableModel.removeRow(error);
312
-            if (selectedRow >= tableModel.getRowCount()) {
313
-                selectedRow = tableModel.getRowCount() - 1;
314
-            }
315
-            table.getSelectionModel().setSelectionInterval(selectedRow,
316
-                    selectedRow);
319
+        SwingUtilities.invokeLater(new Runnable() {
317
 
320
 
318
-            if (tableModel.getRowCount() > 0) {
319
-                deleteAllButton.setEnabled(true);
320
-            } else {
321
-                deleteAllButton.setEnabled(false);
321
+            /** {@inheritDoc} */
322
+            @Override
323
+            public void run() {
324
+                if (isReady()) {
325
+                    synchronized (tableModel) {
326
+                        int selectedRow = table.getSelectedRow();
327
+                        tableModel.removeRow(error);
328
+                        if (selectedRow >= tableModel.getRowCount()) {
329
+                            selectedRow = tableModel.getRowCount() - 1;
330
+                        }
331
+                        table.getSelectionModel().setSelectionInterval(selectedRow,
332
+                                selectedRow);
333
+
334
+                        if (tableModel.getRowCount() > 0) {
335
+                            deleteAllButton.setEnabled(true);
336
+                        } else {
337
+                            deleteAllButton.setEnabled(false);
338
+                        }
339
+                    }
340
+                }
322
             }
341
             }
323
-        }
342
+        });
324
     }
343
     }
325
 
344
 
326
     /** {@inheritDoc} */
345
     /** {@inheritDoc} */
327
     @Override
346
     @Override
328
     public void errorStatusChanged(final ProgramError error) {
347
     public void errorStatusChanged(final ProgramError error) {
329
-        final int errorRow;
330
-        synchronized (tableModel) {
331
-            errorRow = tableModel.indexOf(error);
348
+        SwingUtilities.invokeLater(new Runnable() {
349
+
350
+            /** {@inheritDoc} */
351
+            @Override
352
+            public void run() {
353
+                if (isReady()) {
354
+                    final int errorRow;
355
+                    synchronized (tableModel) {
356
+                        errorRow = tableModel.indexOf(error);
357
+
358
+                        if (errorRow != -1 && errorRow < tableModel.getRowCount()) {
359
+                            tableModel.fireTableRowsUpdated(errorRow, errorRow);
360
+                        }
361
+                    }
362
+                    if (errorRow > -1) {
363
+                        deleteButton.setEnabled(true);
364
+                        if (error.getReportStatus() == ErrorReportStatus.NOT_APPLICABLE ||
365
+                                error.getReportStatus() == ErrorReportStatus.FINISHED) {
366
+                            sendButton.setEnabled(false);
367
+                        } else {
368
+                            sendButton.setEnabled(true);
369
+                        }
370
+                    } else {
371
+                        errorDetails.setError(null);
372
+                        deleteButton.setEnabled(false);
373
+                        sendButton.setEnabled(false);
374
+                    }
332
 
375
 
333
-            if (errorRow != -1 && errorRow < tableModel.getRowCount()) {
334
-                tableModel.fireTableRowsUpdated(errorRow, errorRow);
335
-            }
336
-        }
337
-        if (errorRow > -1) {
338
-                deleteButton.setEnabled(true);
339
-                if (error.getReportStatus() == ErrorReportStatus.NOT_APPLICABLE ||
340
-                        error.getReportStatus() == ErrorReportStatus.FINISHED) {
341
-                    sendButton.setEnabled(false);
342
-                } else {
343
-                    sendButton.setEnabled(true);
344
                 }
376
                 }
345
-            } else {
346
-                errorDetails.setError(null);
347
-                deleteButton.setEnabled(false);
348
-                sendButton.setEnabled(false);
349
             }
377
             }
378
+        });
350
     }
379
     }
351
 
380
 
352
     /** {@inheritDoc} */
381
     /** {@inheritDoc} */

+ 0
- 1
src/com/dmdirc/ui/swing/framemanager/windowmenu/WindowMenuFrameManager.java Datei anzeigen

24
 
24
 
25
 import com.dmdirc.FrameContainer;
25
 import com.dmdirc.FrameContainer;
26
 import com.dmdirc.FrameContainerComparator;
26
 import com.dmdirc.FrameContainerComparator;
27
-import com.dmdirc.GlobalWindow;
28
 import com.dmdirc.Main;
27
 import com.dmdirc.Main;
29
 import com.dmdirc.config.IdentityManager;
28
 import com.dmdirc.config.IdentityManager;
30
 import com.dmdirc.interfaces.SelectionListener;
29
 import com.dmdirc.interfaces.SelectionListener;

Laden…
Abbrechen
Speichern