psmith      2003/06/19 15:58:12

  Modified:    src/java/org/apache/log4j/chainsaw ReceiversPanel.java
  Log:
  Run the restarting of all the Receiver plugin's in a separate thread
  so the Event Dispatch thread can continue on painting the screen.
  
  also ensured that the runnable that causes the Receiver tree to be
  updated is done through the event dispatch thread.
  
  Revision  Changes    Path
  1.6       +32 -16    
jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java
  
  Index: ReceiversPanel.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/chainsaw/ReceiversPanel.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ReceiversPanel.java       19 Jun 2003 06:20:09 -0000      1.5
  +++ ReceiversPanel.java       19 Jun 2003 22:58:12 -0000      1.6
  @@ -119,22 +119,30 @@
                     logui,
                     "This will cause any active Receiver to stop, and disconnect.  Is 
this ok?",
                     "Confirm", JOptionPane.OK_CANCEL_OPTION) == 
JOptionPane.OK_OPTION) {
  -              Collection allReceivers =
  -                PluginRegistry.getPlugins(
  -                  LogManager.getLoggerRepository(), Receiver.class);
  -
  -              for (Iterator iter = allReceivers.iterator(); iter.hasNext();) {
  -                Receiver item = (Receiver) iter.next();
  -                PluginRegistry.stopPlugin(item);
  -                PluginRegistry.startPlugin(item);
  -              }
  -
  -              updateReceiverTree.run();
  -              logui.getStatusBar().setMessage(
  -                "All Receivers have been (re)started");
  +              new Thread(
  +                new Runnable() {
  +                  public void run() {
  +                    Collection allReceivers =
  +                      PluginRegistry.getPlugins(
  +                        LogManager.getLoggerRepository(), Receiver.class);
  +
  +                    for (Iterator iter = allReceivers.iterator();
  +                        iter.hasNext();) {
  +                      Receiver item = (Receiver) iter.next();
  +                      PluginRegistry.stopPlugin(item);
  +                      PluginRegistry.startPlugin(item);
  +                    }
  +
  +                    
  +                    updateReceiverTreeInDispatchThread();
  +                    logui.getStatusBar().setMessage(
  +                      "All Receivers have been (re)started");
  +                  }
  +                }).start();
               }
             }
           };
  +
       startAllAction.putValue(
         Action.SHORT_DESCRIPTION,
         "Ensures that any Receiver that isn't active, is started.");
  @@ -287,11 +295,11 @@
       SocketNodeEventListener listener =
         new SocketNodeEventListener() {
           public void socketOpened(String remoteInfo) {
  -          SwingUtilities.invokeLater(updateReceiverTree);
  +          updateReceiverTreeInDispatchThread();
           }
   
           public void socketClosedEvent(Exception e) {
  -          SwingUtilities.invokeLater(updateReceiverTree);
  +          updateReceiverTreeInDispatchThread();
           }
         };
   
  @@ -304,6 +312,14 @@
         element.addSocketNodeEventListener(listener);
       }
     }
  +  
  +  private void updateReceiverTreeInDispatchThread() {
  +    if(SwingUtilities.isEventDispatchThread()){
  +      updateReceiverTree.run();
  +    } else{
  +      SwingUtilities.invokeLater(updateReceiverTree);
  +    }
  +  }
   
     class ReceiverPopupMenu extends JPopupMenu {
       final JMenu startMenu = new JMenu("Start");
  @@ -376,7 +392,7 @@
                 socketReceiver.setActive(false);
                 logui.getStatusBar().setMessage(
                   socketReceiver.getName() + " has been paused");
  -              updateReceiverTree.run();
  +              updateReceiverTreeInDispatchThread();
               }
             }
           };
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to