Tại sao khi tôi quấn một SwingWorker xung quanh mã này, nó không còn báo cáo một ngoại lệ bị ném nữa?Tại sao ngoại lệ Java của tôi không in dấu vết ngăn xếp khi được ném vào trong một 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;
}
}
Nó không được ném hoặc không được báo cáo như bạn mong đợi? –
Nó không được báo cáo. Tôi cho rằng nó đang được ném nhưng stacktrace không in. – sdasdadas
Đoán của tôi là một ngoại lệ vẫn bị ném, nhưng cuộc gọi của trình xử lý nội bộ tới 'doInBackground()' được bao bọc trong câu lệnh try-catch được thiết kế để bỏ qua các ngoại lệ. – Vulcan