We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

Updating a dialog while reading a file

cmp2
cmp2 asked
on
Medium Priority
232 Views
Last Modified: 2010-03-31
I have a dialog that starts up a new file reader object (that runs in a separate thread). That file reader object needs to update a textfield message box on the dialog as it progresses through the file. I tried  starting the dialog in new thread but the message box still doesn't update until the file reader object is done reading the file. Here's a code summary of what I have done:

Thread a;
Runnable run2 = new Runnable(){
    public void run(){
        //start up dialog that starts the file reader object (in another thread)
    }
};

a = new Thread(run2);
a.start();

Any ideas how I correctly update the textfield in the dialog from the different file reader object? Right now I pass a reference to the textfield to the file reader object.
Comment
Watch Question

CERTIFIED EXPERT
Top Expert 2016

Commented:
Try something like:


// inner class
class FieldUpdater implements Runnable {
      public static void run() {
            yourDialog.setText("New text");
      }
}


// in your file thread (i.e. in run2) - update dialog:
invokeAndWait(new FieldUpdater())

CERTIFIED EXPERT
Top Expert 2016

Commented:
Sorry

SwingUtilities.invokeAndWait(new FieldUpdater());
Java Developer
CERTIFIED EXPERT
Top Expert 2010
Commented:
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
>> Runnable run2 = new Runnable(){

Thread run2 = new Thread () {

could also work.
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
I don't think that my comment would make much of a difference because complete solutions had already been provided. It was just another alternative which didn't make much of a difference.

Split between objects and CEHJ only.
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
theres no need to use invokeAndWait() in this case.
CERTIFIED EXPERT
Top Expert 2016

Commented:
True but it doesn't hurt and encourages good habits for when it is required
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
unnecessaary object creation is *not* a good habit to encourage.
In fact it is a *bad* habit.
CERTIFIED EXPERT
Top Expert 2016

Commented:
All that will happen, most probably, if the questioner is not aware of the working of interaction with the EDT, is that he'll go away and take the easy way in another context and wonder why he's got problems. It's the correct way to do it anyway as it happens. It just transpires that you can get away without it in this case.
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
Sorry but thats does not make any sense whatsever, what you have posted is not relevant to this question. And even if they were then you should explain the reasoning (but I guess there is none so whats to explain).
CERTIFIED EXPERT
Top Expert 2016

Commented:
I've done all the explaining that i'm going to do sorry. If you don't understand what i mean, maybe mayank will be kind enough to explain it to you
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
Explaination of what??? The point is your comment is irrelevant to the question.
So no explanation necessary.
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
Ah, cool it guys. Venabili, for some reason, I feel your initial recommendation was fine and I hope the question is closed as per that ;-)
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
> for some reason, I feel your initial recommendation was fine

Can you help me understand then how calling setText() from the event dispatch thread will make any difference then?
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
>> I feel your initial recommendation was fine

Oh, I said that just hoping to close the arguments going on. I don't see a point arguing so much because the questioner is not listening.

>>  how calling setText() from the event dispatch thread will make any difference

So far, I had not been following the comments carefully on this page after the clean-up comment, but now that I do see them again, I think that the invokeAndWait () should not be used.
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
>  I don't see a point arguing so much because the questioner is not listening.

My concern in this case is more the PAQ, people reading the thread at a later date will be misled. (I don't see a point in arguing about it either)
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
>> people reading the thread at a later date

Your concern about that is correct.
CERTIFIED EXPERT
Top Expert 2016

Commented:
A point to you mayankeagle - and the last word on the matter from me - i too am concerned, believe it or not, about people being misled. That's why i am pointing out that it's NOT ok to change components from a non-EDT thread in Swing in most cases.
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
> That's why i am pointing out that it's NOT ok to change components from a non-EDT thread in Swing in most cases.

no one said it was but that has nothing to do with this question.
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
I know that you are concerned too, CEHJ ;-) I know that you always are.... both of you :-)

But as far as my knowledge goes, I don't see why invokeAndWait () would help much, and I also don't find what non-EDT thread in Swing has to do with this. Maybe that I know a little lesser or am unable to see something which is very apparent to both of you. Excuse my little knowledge compared to yours ;-)
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
Don't be cross at me for something ;-) I hope you didn't miscomprehend me to be partial or something like that.

>> believe it or not,

You don't need to say that. I always believe in what you say.

I respect both of you equally, and your knowledge. Maybe that I don't know enough to speak more on this.
Mayank SPrincipal Technologist
CERTIFIED EXPERT

Commented:
I would still say, split objects and CEHJ, like I said before. This is the last comment from me on this page.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.