From: argius Date: Mon, 1 Dec 2014 12:14:54 +0000 (+0900) Subject: make it possible to call WindowOutputProcessor.showErrorDialog from non X-Git-Tag: v4.2.0-RC1~5 X-Git-Url: http://git.osdn.net/view?p=stew%2FStew4.git;a=commitdiff_plain;h=16ae6293ef6e59f6c91d57ff16721b316e02e5f6 make it possible to call WindowOutputProcessor.showErrorDialog from non AWT thread --- diff --git a/src/net/argius/stew/ui/window/ResultSetTableModel.java b/src/net/argius/stew/ui/window/ResultSetTableModel.java index a1a92c8..5776814 100644 --- a/src/net/argius/stew/ui/window/ResultSetTableModel.java +++ b/src/net/argius/stew/ui/window/ResultSetTableModel.java @@ -1,6 +1,5 @@ package net.argius.stew.ui.window; -import static java.awt.EventQueue.invokeLater; import static java.sql.Types.*; import static java.util.Collections.nCopies; import static net.argius.stew.text.TextUtilities.join; @@ -426,13 +425,7 @@ final class ResultSetTableModel extends DefaultTableModel { log.warn(ex); } if (!errors.isEmpty()) { - class ErrorNotifier implements Runnable { - @Override - public void run() { - WindowOutputProcessor.showErrorDialog(null, errors.get(0)); - } - } - invokeLater(new ErrorNotifier()); + WindowOutputProcessor.showErrorDialog(null, errors.get(0)); } } } diff --git a/src/net/argius/stew/ui/window/WindowOutputProcessor.java b/src/net/argius/stew/ui/window/WindowOutputProcessor.java index c97b0a6..433d7d6 100644 --- a/src/net/argius/stew/ui/window/WindowOutputProcessor.java +++ b/src/net/argius/stew/ui/window/WindowOutputProcessor.java @@ -440,6 +440,7 @@ final class WindowOutputProcessor extends JFrame implements OutputProcessor, Any } static void showErrorDialog(final Component parent, final Throwable th) { + // this method can call from non AWT thread log.atEnter("showErrorDialog"); log.warn(th, ""); final String s1; @@ -454,13 +455,25 @@ final class WindowOutputProcessor extends JFrame implements OutputProcessor, Any th.printStackTrace(out); s2 = replaceEOL(buffer.toString()); } - JPanel p = new JPanel(new BorderLayout()); - p.add(new JScrollPane(setupReadOnlyTextArea(new JTextArea(s1, 2, 60))), BorderLayout.NORTH); - p.add(new JScrollPane(setupReadOnlyTextArea(new JTextArea(s2, 6, 60))), BorderLayout.CENTER); - JDialog d = (new JOptionPane(p, ERROR_MESSAGE)).createDialog(parent, res.get("e.error")); - d.setResizable(true); - d.setVisible(true); - d.dispose(); + final String title = res.get("e.error"); + class ErrorDialogTask implements Runnable { + @Override + public void run() { + JPanel p = new JPanel(new BorderLayout()); + p.add(new JScrollPane(setupReadOnlyTextArea(new JTextArea(s1, 2, 60))), BorderLayout.NORTH); + p.add(new JScrollPane(setupReadOnlyTextArea(new JTextArea(s2, 6, 60))), BorderLayout.CENTER); + JDialog d = (new JOptionPane(p, ERROR_MESSAGE)).createDialog(parent, title); + d.setResizable(true); + d.setVisible(true); + d.dispose(); + } + } + ErrorDialogTask task = new ErrorDialogTask(); + if (EventQueue.isDispatchThread()) { + task.run(); + } else { + EventQueue.invokeLater(task); + } log.atExit("showErrorDialog"); }