Java's Swing Threading
Posted
by nevets1219
on Stack Overflow
See other posts from Stack Overflow
or by nevets1219
Published on 2010-04-02T00:05:12Z
Indexed on
2010/04/02
0:13 UTC
Read the original article
Hit count: 214
My understanding is that if I start up another thread to perform some actions, I would need to SwingUtilities.invokeAndWait
or SwingUtilities.invokeLater
to update the GUI while I'm in said thread. Please correct me if I'm wrong.
What I'm trying to accomplish is relatively straightforward: when the user clicks submit, I want to (before performing any actions) disable the submit button, perform the action, and at the end of the action re-enable the button. My method to perform the action updates the GUI directly (displays results) when it gets the results back.
This action basically queries a server and gets some results back.
What I have so far is:
boolean isRunning = false;
synchronized handleButtonClick() {
if ( isRunning == false ) {
button.setEnabled( false );
isRunning = true;
doAction();
}
}
doAction() {
new Thread() {
try {
doAction(); // Concern A
} catch ( ... ) {
displayStackTrace( ... ); // Concern B
} finally {
SwingUtilities.invokeLater ( /* simple Runnable to enable button */ );
isRunning = false;
}
}
}
For both of my concerns above, do I would have to use SwingUtilities.invokeAndWait
since they both will update the GUI? All GUI updates revolve around updating JTextPane
. Do I need to in my thread check if I'm on EDT and if so I can call my code (regardless of whether it updates the GUI or not) and NOT use SwingUtilities.invokeAndWait
?
© Stack Overflow or respective owner