6

このコードを SwingWorker でラップすると、スローされた例外が報告されなくなったのはなぜですか?

import java.security.InvalidParameterException;

import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;

public class Test {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new SwingWorker<Void, Void>() {

                    @Override
                    protected Void doInBackground() throws Exception {
                        IntegerString s = new IntegerString("EIGHT");
                        return null;
                    }

                }.execute();

            }

        });

    }

}

class IntegerString {

    public IntegerString(String s) {
        if (!isInteger(s)) {
            System.out.println("...throwing exception.");
            throw new InvalidParameterException("Thrown.");
        }
        // ...
    }

    static boolean isInteger(String str) {
        if (str == null) {
            return false;
        }
        int length = str.length();
        if (length == 0) {
            return false;
        }
        int i = 0;
        if (str.charAt(0) == '-') {
            if (length == 1) {
                return false;
            }
            i = 1;
        }
        for (; i < length; i++) {
            char c = str.charAt(i);
            if (c <= '/' || c >= ':') {
                return false;
            }
        }
        return true;
    }
}
4

1 に答える 1

8

get()で発生した例外を取得するには、を呼び出す必要がありますdoInBackground()。たとえば、次のようなdone()方法で実行できます。

@Override
protected void done() {
    try {
        get();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2013-02-04T21:07:01.467 に答える