Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > using threads with 2 different GUI views

Reply
Thread Tools

using threads with 2 different GUI views

 
 
Brandon McCombs
Guest
Posts: n/a
 
      01-10-2007
I have a tabbed pane with 3 tabs. 2 of the tabs can start a thread that
performs a search and the results of the search get put into the
respective data models that are in the tabs. I created 1 class that
extends Thread that is used across both tabs. The tabs are searching
the same repository, just with different criteria so it's possible that
the search operation for 1 tab will finish before the other.

I've discovered that when the search from tab 1 finishes then *some* of
the results from tab 3 get put into the data model for tab 1. First, I
don't even know why only some of the results would be listed in tab 1
but the bigger issue is that the results from tab 3's search operation
shouldn't be showing up at all in tab 1 because it spawned its own
search operation with a new thread instance.

A while back I created a single JPanel class that contains all the
widgets for a particular tab to separate the tab GUI code. Each one of
those JPanel classes implements an interface I created a couple days ago
and the interface methods are called by the AsyncSearch thread to pass
back the results. The constructor you see below takes an
AsyncSearchInterface object as the argument which all the JPanel classes
implement as I state above.

This is how I setup a search operation in my Search Jpanel class. I do
this everytime so a new thread is created for every search.
AsyncSearch asyncSearch = new AsyncSearch(this);
asyncSearch.setSearchBase(searchBase);
asyncSearch.setFilter(searchFilter);
asyncSearch.setTimeLimit(timeLimit);
asyncSearch.setResultLimit(resLimit);
asyncSearch.setReturnedAttributes(objAttribs);
asyncSearch.setScope(searchScope);
asyncSearch.start();

To tell a tab that its results are ready to be processed I do the
following in the run() of the thread, after the search() actually
executes of course (component is the JPanel instance that implements
AsyncSearchInterface):

final String thread = getName();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
component.updateGUI(results, thread);
component.resetGUI(results);
}
});

I can tell that when 2 threads are spawned that they both terminate
although they do it at the same time. The search from tab 1 determines
when the one from tab 3 terminates but the data displayed in tab 1 is
the data from tab 3's search. I'm not doing any join() or anything fancy
like that so I don't see how the threads seem to be becoming one. The
results variable in the thread is not a static variable either.


Can anyone explain why this is happening? Do I need to make another
class that uses a thread so each tab has its own thread class? I hate to
do that since I was trying to save code by making a generic search
thread that all tabs could utilize.

thanks
Brandon
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
accessing data with different views toton C++ 0 10-28-2006 12:10 PM
different views for 1280 x abc and smaller resolutions ActionNotMotion@gmail.com HTML 5 06-16-2006 05:20 PM
Different Views in Different Browsers Doug Mazzacua HTML 7 12-14-2005 04:49 AM
Objects with different data views Fredrik Lundh Python 5 10-08-2005 04:26 AM
TB 1.0.4 - can the News and Mail views (View > Message Body As ...)be different? Z Firefox 6 06-22-2005 05:14 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57