소스 검색

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 16 년 전
부모
커밋
d5f26d14b0

+ 70
- 41
src/com/dmdirc/ui/swing/dialogs/error/ErrorListDialog.java 파일 보기

@@ -19,7 +19,6 @@
19 19
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 20
  * SOFTWARE.
21 21
  */
22
-
23 22
 package com.dmdirc.ui.swing.dialogs.error;
24 23
 
25 24
 import com.dmdirc.ui.swing.components.renderers.ErrorLevelIconCellRenderer;
@@ -222,7 +221,7 @@ public final class ErrorListDialog extends StandardDialog implements
222 221
 
223 222
         splitPane.setTopComponent(scrollPane);
224 223
         splitPane.setBottomComponent(panel);
225
-        
224
+
226 225
         splitPane.setDividerSize((int) PlatformDefaults.getPanelInsets(0).getValue());
227 226
 
228 227
         getContentPane().add(splitPane);
@@ -286,67 +285,97 @@ public final class ErrorListDialog extends StandardDialog implements
286 285
             /** {@inheritDoc} */
287 286
             @Override
288 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 301
     /** {@inheritDoc} */
301 302
     @Override
302 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 316
     /** {@inheritDoc} */
307 317
     @Override
308 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 345
     /** {@inheritDoc} */
327 346
     @Override
328 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 381
     /** {@inheritDoc} */

+ 0
- 1
src/com/dmdirc/ui/swing/framemanager/windowmenu/WindowMenuFrameManager.java 파일 보기

@@ -24,7 +24,6 @@ package com.dmdirc.ui.swing.framemanager.windowmenu;
24 24
 
25 25
 import com.dmdirc.FrameContainer;
26 26
 import com.dmdirc.FrameContainerComparator;
27
-import com.dmdirc.GlobalWindow;
28 27
 import com.dmdirc.Main;
29 28
 import com.dmdirc.config.IdentityManager;
30 29
 import com.dmdirc.interfaces.SelectionListener;

Loading…
취소
저장