From a08ebb673239da638edc2a07957e5c3e0394cad0 Mon Sep 17 00:00:00 2001 From: mguessan Date: Sun, 17 May 2009 22:24:43 +0000 Subject: [PATCH] Make all threads daemon and remove System.exit calls git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@566 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/AbstractConnection.java | 1 + src/java/davmail/AbstractServer.java | 1 + .../http/DavGatewayHttpClientFacade.java | 3 +- src/java/davmail/ui/tray/AwtGatewayTray.java | 20 +++++++++---- .../davmail/ui/tray/FrameGatewayTray.java | 16 +++++++--- .../davmail/ui/tray/OSXAwtGatewayTray.java | 8 +++++ .../davmail/ui/tray/OSXFrameGatewayTray.java | 8 +++++ src/java/davmail/ui/tray/SwtGatewayTray.java | 29 ++++++++++--------- 8 files changed, 63 insertions(+), 23 deletions(-) diff --git a/src/java/davmail/AbstractConnection.java b/src/java/davmail/AbstractConnection.java index e05515fc..27f9d6fc 100644 --- a/src/java/davmail/AbstractConnection.java +++ b/src/java/davmail/AbstractConnection.java @@ -33,6 +33,7 @@ public class AbstractConnection extends Thread { public AbstractConnection(String name, Socket clientSocket) { super(name); this.client = clientSocket; + setDaemon(true); } // Initialize the streams and set thread name diff --git a/src/java/davmail/AbstractServer.java b/src/java/davmail/AbstractServer.java index 57c4c539..e6d66e03 100644 --- a/src/java/davmail/AbstractServer.java +++ b/src/java/davmail/AbstractServer.java @@ -42,6 +42,7 @@ public abstract class AbstractServer extends Thread { */ public AbstractServer(String name, int port, int defaultPort) { super(name); + setDaemon(true); if (port == 0) { this.port = defaultPort; } else { diff --git a/src/java/davmail/http/DavGatewayHttpClientFacade.java b/src/java/davmail/http/DavGatewayHttpClientFacade.java index caecc50b..5dec3271 100644 --- a/src/java/davmail/http/DavGatewayHttpClientFacade.java +++ b/src/java/davmail/http/DavGatewayHttpClientFacade.java @@ -306,7 +306,7 @@ public final class DavGatewayHttpClientFacade { if (multiThreadedHttpConnectionManager == null) { multiThreadedHttpConnectionManager = new MultiThreadedHttpConnectionManager(); multiThreadedHttpConnectionManager.getParams().setDefaultMaxConnectionsPerHost(100); - httpConnectionManagerThread = new Thread(HttpConnectionManager.class.getName()) { + httpConnectionManagerThread = new Thread(HttpConnectionManager.class.getSimpleName()) { @Override public void run() { boolean terminated = false; while (!terminated) { @@ -321,6 +321,7 @@ public final class DavGatewayHttpClientFacade { } } }; + httpConnectionManagerThread.setDaemon(true); httpConnectionManagerThread.start(); } } diff --git a/src/java/davmail/ui/tray/AwtGatewayTray.java b/src/java/davmail/ui/tray/AwtGatewayTray.java index 516c9b20..6b194bfd 100644 --- a/src/java/davmail/ui/tray/AwtGatewayTray.java +++ b/src/java/davmail/ui/tray/AwtGatewayTray.java @@ -2,6 +2,7 @@ package davmail.ui.tray; import davmail.Settings; import davmail.BundleMessage; +import davmail.DavGateway; import davmail.ui.AboutFrame; import davmail.ui.SettingsFrame; import org.apache.log4j.Logger; @@ -33,6 +34,7 @@ public class AwtGatewayTray implements DavGatewayTrayInterface { private static Image image; private static Image image2; private static Image inactiveImage; + protected static LogBrokerMonitor logBrokerMonitor; private boolean isActive = true; public Image getFrameIcon() { @@ -168,11 +170,13 @@ public class AwtGatewayTray implements DavGatewayTrayInterface { Logger rootLogger = Logger.getRootLogger(); LF5Appender lf5Appender = (LF5Appender) rootLogger.getAppender("LF5Appender"); if (lf5Appender == null) { - lf5Appender = new LF5Appender(new LogBrokerMonitor(LogLevel.getLog4JLevels()) { - @Override protected void closeAfterConfirm() { + logBrokerMonitor = new LogBrokerMonitor(LogLevel.getLog4JLevels()) { + @Override + protected void closeAfterConfirm() { hide(); } - }); + }; + lf5Appender = new LF5Appender(logBrokerMonitor); lf5Appender.setName("LF5Appender"); rootLogger.addAppender(lf5Appender); } @@ -184,9 +188,15 @@ public class AwtGatewayTray implements DavGatewayTrayInterface { // create an action exitListener to listen for exit action executed on the tray icon ActionListener exitListener = new ActionListener() { public void actionPerformed(ActionEvent e) { + DavGateway.stop(); SystemTray.getSystemTray().remove(trayIcon); - //noinspection CallToSystemExit - System.exit(0); + + // dispose frames + settingsFrame.dispose(); + aboutFrame.dispose(); + if (logBrokerMonitor != null) { + logBrokerMonitor.dispose(); + } } }; // create menu item for the exit action diff --git a/src/java/davmail/ui/tray/FrameGatewayTray.java b/src/java/davmail/ui/tray/FrameGatewayTray.java index 7313e77e..4eeecd66 100644 --- a/src/java/davmail/ui/tray/FrameGatewayTray.java +++ b/src/java/davmail/ui/tray/FrameGatewayTray.java @@ -2,6 +2,7 @@ package davmail.ui.tray; import davmail.Settings; import davmail.BundleMessage; +import davmail.DavGateway; import davmail.ui.AboutFrame; import davmail.ui.SettingsFrame; import org.apache.log4j.Logger; @@ -25,6 +26,7 @@ public class FrameGatewayTray implements DavGatewayTrayInterface { protected static JFrame mainFrame; protected static AboutFrame aboutFrame; protected static SettingsFrame settingsFrame; + protected static LogBrokerMonitor logBrokerMonitor; private static JEditorPane errorArea; private static JLabel errorLabel; private static JEditorPane messageArea; @@ -113,12 +115,13 @@ public class FrameGatewayTray implements DavGatewayTrayInterface { Logger rootLogger = Logger.getRootLogger(); LF5Appender lf5Appender = (LF5Appender) rootLogger.getAppender("LF5Appender"); if (lf5Appender == null) { - lf5Appender = new LF5Appender(new LogBrokerMonitor(LogLevel.getLog4JLevels()) { + logBrokerMonitor = new LogBrokerMonitor(LogLevel.getLog4JLevels()) { @Override protected void closeAfterConfirm() { hide(); } - }); + }; + lf5Appender = new LF5Appender(logBrokerMonitor); lf5Appender.setName("LF5Appender"); rootLogger.addAppender(lf5Appender); } @@ -174,8 +177,13 @@ public class FrameGatewayTray implements DavGatewayTrayInterface { // create an action exitListener to listen for exit action executed on the tray icon ActionListener exitListener = new ActionListener() { public void actionPerformed(ActionEvent e) { - //noinspection CallToSystemExit - System.exit(0); + DavGateway.stop(); + // dispose frames + settingsFrame.dispose(); + aboutFrame.dispose(); + if (logBrokerMonitor != null) { + logBrokerMonitor.dispose(); + } } }; // create menu item for the exit action diff --git a/src/java/davmail/ui/tray/OSXAwtGatewayTray.java b/src/java/davmail/ui/tray/OSXAwtGatewayTray.java index 1560bb79..c87891dd 100644 --- a/src/java/davmail/ui/tray/OSXAwtGatewayTray.java +++ b/src/java/davmail/ui/tray/OSXAwtGatewayTray.java @@ -2,6 +2,7 @@ package davmail.ui.tray; import davmail.ui.OSXAdapter; import davmail.BundleMessage; +import davmail.DavGateway; /** * Extended Awt tray with OSX extensions. @@ -9,6 +10,13 @@ import davmail.BundleMessage; public class OSXAwtGatewayTray extends AwtGatewayTray { @SuppressWarnings({"SameReturnValue"}) public boolean quit() { + DavGateway.stop(); + // dispose frames + settingsFrame.dispose(); + aboutFrame.dispose(); + if (logBrokerMonitor != null) { + logBrokerMonitor.dispose(); + } return true; } diff --git a/src/java/davmail/ui/tray/OSXFrameGatewayTray.java b/src/java/davmail/ui/tray/OSXFrameGatewayTray.java index f5ac5d5d..084e3de2 100644 --- a/src/java/davmail/ui/tray/OSXFrameGatewayTray.java +++ b/src/java/davmail/ui/tray/OSXFrameGatewayTray.java @@ -2,6 +2,7 @@ package davmail.ui.tray; import davmail.ui.OSXAdapter; import davmail.BundleMessage; +import davmail.DavGateway; import javax.swing.*; import java.awt.event.ActionEvent; @@ -14,6 +15,13 @@ public class OSXFrameGatewayTray extends FrameGatewayTray { @SuppressWarnings({"SameReturnValue"}) public boolean quit() { + DavGateway.stop(); + // dispose frames + settingsFrame.dispose(); + aboutFrame.dispose(); + if (logBrokerMonitor != null) { + logBrokerMonitor.dispose(); + } return true; } diff --git a/src/java/davmail/ui/tray/SwtGatewayTray.java b/src/java/davmail/ui/tray/SwtGatewayTray.java index 43014c0d..ba9734b6 100644 --- a/src/java/davmail/ui/tray/SwtGatewayTray.java +++ b/src/java/davmail/ui/tray/SwtGatewayTray.java @@ -2,6 +2,7 @@ package davmail.ui.tray; import davmail.Settings; import davmail.BundleMessage; +import davmail.DavGateway; import davmail.ui.AboutFrame; import davmail.ui.SettingsFrame; import org.apache.log4j.Logger; @@ -31,6 +32,7 @@ public class SwtGatewayTray implements DavGatewayTrayInterface { private static Image inactiveImage; private static Display display; private static Shell shell; + private static LogBrokerMonitor logBrokerMonitor; private boolean isActive = true; private boolean isReady; @@ -221,12 +223,13 @@ public class SwtGatewayTray implements DavGatewayTrayInterface { Logger rootLogger = Logger.getRootLogger(); LF5Appender lf5Appender = (LF5Appender) rootLogger.getAppender("LF5Appender"); if (lf5Appender == null) { - lf5Appender = new LF5Appender(new LogBrokerMonitor(LogLevel.getLog4JLevels()) { + logBrokerMonitor = new LogBrokerMonitor(LogLevel.getLog4JLevels()) { @Override protected void closeAfterConfirm() { hide(); } - }); + }; + lf5Appender = new LF5Appender(logBrokerMonitor); lf5Appender.setName("LF5Appender"); rootLogger.addAppender(lf5Appender); } @@ -240,18 +243,8 @@ public class SwtGatewayTray implements DavGatewayTrayInterface { exitItem.setText(BundleMessage.format("UI_EXIT")); exitItem.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { + DavGateway.stop(); shell.dispose(); - - if (image != null) { - image.dispose(); - } - if (image2 != null) { - image2.dispose(); - } - display.dispose(); - - //noinspection CallToSystemExit - System.exit(0); } }); @@ -271,6 +264,10 @@ public class SwtGatewayTray implements DavGatewayTrayInterface { } } + if (trayItem != null) { + trayItem.dispose(); + } + if (image != null) { image.dispose(); } @@ -278,6 +275,12 @@ public class SwtGatewayTray implements DavGatewayTrayInterface { image2.dispose(); } display.dispose(); + // dispose AWT frames + settingsFrame.dispose(); + aboutFrame.dispose(); + if (logBrokerMonitor != null) { + logBrokerMonitor.dispose(); + } } } }.start();