我应该怎么做SwingUtilities.invokeAndWait抛出的异常

时间:2010-02-17 09:04:50

标签: java swing multithreading

SwingUtilities.invokeAndWait()会引发InterruptedExceptionInvocationTargetException我该如何处理?

 public static void invokeAndWait(Runnable doRun) throws InterruptedException,
                                 InvocationTargetException

我想使用该方法显示一个对话框并等待用户说是或否。据我所知,InvocationTargetException表示有一个RuntimeException,我可以这样对待它。然而,我真正想要的InterruptedException是忽略它并让线程继续,直到用户给出答案。

2 个答案:

答案 0 :(得分:2)

在此article中解释了InterruptedException。

InvocationTargetException,如果Runnables run方法抛出异常,则抛出它。

也许运行这个例子澄清了事情:

        try {
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                System.out.println("1");
                if (true) {
                    throw new RuntimeException("runtime exception");
                }
                System.out.println("2");
            }
        });
    } catch (InterruptedException e) {
        e.printStackTrace(System.out);
    } catch (InvocationTargetException e) {
        e.printStackTrace(System.out);
    }

答案 1 :(得分:1)

显示对话框时出现InterruptedException非常罕见。您可以忽略它,或者再次尝试通过在新的Runnable上调用invokeAndWait来显示对话框。

如果对话框是独立调用的(即不是主GUI的一部分),使用invokeAndWait就可以了。但是,如果要在EDT中显示对话框,则可能不希望使用invokeAndWait。更多详情:Concurrency in Swing