20 package net.sf.gridarta.mainactions;
22 import java.awt.Window;
23 import java.lang.reflect.InvocationTargetException;
24 import java.util.Collection;
25 import java.util.concurrent.CopyOnWriteArrayList;
26 import java.util.prefs.Preferences;
27 import javax.swing.SwingUtilities;
33 import net.
sf.japi.swing.action.ActionBuilder;
34 import net.
sf.japi.swing.action.ActionBuilderFactory;
35 import org.apache.log4j.Category;
36 import org.apache.log4j.Logger;
37 import org.jetbrains.annotations.NotNull;
49 private static final ActionBuilder
ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta");
73 private final Collection<ExiterListener>
exiterListeners =
new CopyOnWriteArrayList<>();
94 public void doExit(
final int returnCode) {
97 listener.preExitNotify();
100 listener.appExitNotify();
102 final Thread thread =
new Thread(
new Runnable() {
107 listener.waitExitNotify();
110 SwingUtilities.invokeAndWait(mainViewFrame::dispose);
111 }
catch (
final InterruptedException ex) {
112 Thread.currentThread().interrupt();
113 LOG.warn(
"Cannot destroy main view: " + ex.getMessage());
114 }
catch (
final InvocationTargetException ex) {
115 LOG.warn(
"Cannot destroy main view: " + ex.getMessage());
129 public static void callExit(
final int returnCode) {
131 if (
LOG.isDebugEnabled()) {
134 System.exit(returnCode);
136 if (
LOG.isDebugEnabled()) {