using threads with 2 different GUI views

Discussion in 'Java' started by Brandon McCombs, Jan 10, 2007.

  1. 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
     
    Brandon McCombs, Jan 10, 2007
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Doug Mazzacua

    Different Views in Different Browsers

    Doug Mazzacua, Dec 8, 2005, in forum: HTML
    Replies:
    7
    Views:
    446
    Mark Parnell
    Dec 14, 2005
  2. Replies:
    5
    Views:
    395
  3. Fredrik Lundh

    Objects with different data views

    Fredrik Lundh, Oct 7, 2005, in forum: Python
    Replies:
    5
    Views:
    308
    George Sakkis
    Oct 8, 2005
  4. toton
    Replies:
    0
    Views:
    304
    toton
    Oct 28, 2006
  5. Andy B
    Replies:
    2
    Views:
    313
    Andy B
    Nov 27, 2007
Loading...

Share This Page