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(() -> {
104 listener.waitExitNotify();
107 SwingUtilities.invokeAndWait(mainViewFrame::dispose);
108 }
catch (
final InterruptedException ex) {
109 Thread.currentThread().interrupt();
110 LOG.warn(
"Cannot destroy main view: " + ex.getMessage());
111 }
catch (
final InvocationTargetException ex) {
112 LOG.warn(
"Cannot destroy main view: " + ex.getMessage());
124 public static void callExit(
final int returnCode) {
126 if (
LOG.isDebugEnabled()) {
129 System.exit(returnCode);
131 if (
LOG.isDebugEnabled()) {