Perché quando si avvolge uno SwingWorker con questo codice, non viene più generata un'eccezione?Perché la mia eccezione Java non stampa una traccia di stack quando viene lanciata all'interno di 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;
}
}
Non viene generato o non segnalato come previsto? –
Non viene segnalato. Presumo che venga lanciato ma lo stacktrace non sta stampando. – sdasdadas
La mia ipotesi è che un'eccezione sia ancora lanciata, ma la chiamata del gestore interno a 'doInBackground()' è racchiusa in un'istruzione try-catch progettata per ignorare le eccezioni. – Vulcan