This is the thread's initial revision.
Updating the result windows on the fly doesn't seem like it would be particularly difficult. But I don't know the structure of your code at the moment, so I could be wrong.
Assuming a singular method that displays the windows given a result set.
a la "void showResultsWindow(resultSet)", could make it "resultWindow showResultsWindow(resultSet)", keep it in a map "HashMap<resultSet,resultWindow>", and update the window based on updates in the set "resultWindow window = map.get(resultSet); window.updateData(resultSet); window.markTableDirty();"
Mark table dirty would be this piece of thread safe code "RepaintManager.currentManager(table).markCompletelyDirty(table);"
Keeping the window in a map also allows you to just move that window to the front if someone tries to open the same result window twice. Though you make require a listener to determine if the window was closed, so you can remove it from the hashmap. Just hiding it could be problematic if someone keeps the application open for a long time and runs many different challenges.