Посмотрите документацию для SwingWorker . Это именно то, что вы пытаетесь сделать. Создайте подкласс и вызовите runQueries из doInBackground (), а затем сделайте то, что делает ваш runnable (за исключением проверки if queryNo) в done (). Существуют сторонние версии этого класса, если вы не используете Java 1.6.
class DbSwingWorker extends SwingWorker<Void, Integer> {
@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i <= 50000; i++) {
insertintoDB();
publish(i); //if you want to do some sort of progress update
}
return null;
}
@Override
protected void done() {
int n = JOptionPane.showConfirmDialog(getFrame(), menuBar, null, JOptionPane.YES_NO_OPTION);
if (n == 1) { //NO option was selected
return;
} else {
//display another popupframe with details/report of inserting process
}
}
}
Оригинальную версию, кроме 1.6, можно найти здесь: https://swingworker.dev.java.net/