/** * Das Beenden des Programms laeuft folgendermassen ab: * * <ol> * <li>Wechsel in den Entwurfsmodus (und damit beenden der virtuellen Software und der damit * verbundenen Threads * <li>Pruefung, ob eine Aenderung am Szenario vorgenommen wurde * <ul> * <li>wenn Szenario geaendert wurde, wird gefragt, ob die Datei noch gespeichert werden * soll * <li>wenn das Szenario nicht gespeichert werden soll, werden die Aenderungen verworfen * <li>wenn die Abfrage abgebrochen wird, wird Filius nicht beendet * </ul> * <li>Programmkonfiguration wird gespeichert * <li>das Verzeichnis fuer temporaere Dateien wird geloescht * </ol> */ public static void beenden() { Main.debug.println("INVOKED (static) filius.Main, beenden()"); Object[] programmKonfig; XMLEncoder encoder = null; FileOutputStream fos = null; int entscheidung; boolean abbruch = false; GUIContainer.getGUIContainer().getMenu().selectMode(GUIMainMenu.MODUS_ENTWURF); if (SzenarioVerwaltung.getInstance().istGeaendert()) { entscheidung = JOptionPane.showConfirmDialog( JMainFrame.getJMainFrame(), messages.getString("main_msg1"), messages.getString("main_msg2"), JOptionPane.YES_NO_OPTION); if (entscheidung == JOptionPane.YES_OPTION) { abbruch = false; } else { abbruch = true; } } if (!abbruch) { programmKonfig = new Object[4]; programmKonfig[0] = JMainFrame.getJMainFrame().getBounds(); programmKonfig[1] = SzenarioVerwaltung.getInstance().holePfad(); programmKonfig[2] = Information.getInformation().getLocale().getLanguage(); programmKonfig[3] = Information.getInformation().getLocale().getCountry(); try { fos = new FileOutputStream( Information.getInformation().getArbeitsbereichPfad() + "konfig.xml"); encoder = new XMLEncoder(new BufferedOutputStream(fos)); encoder.writeObject(programmKonfig); } catch (Exception e) { e.printStackTrace(Main.debug); } finally { if (encoder != null) encoder.close(); if (fos != null) { try { fos.close(); } catch (IOException e) { } } } SzenarioVerwaltung.loescheVerzeichnisInhalt(Information.getInformation().getTempPfad()); System.exit(0); } }
/** * Der Start laeuft folgendermassen ab: * * <ol> * <li>Anzeigen eines Startfensters * <li>Initialisierung des Programm-Hauptfensters * <li>Laden eines Szenarios, entweder * <ul> * <li>ein mit dem Programmstart uebergebene Szenariodatei oder * <li>das zuletzt geoeffnete bzw. gespeicherte Szenario * </ul> * <li>Ausblenden des Startfensters * </ol> */ public static void starten(String szenarioDatei) { Main.debug.println("INVOKED (static) filius.Main, starten(" + szenarioDatei + ")"); SplashScreen splashScreen; XMLDecoder xmldec; String konfigPfad; Object[] programmKonfig; konfigPfad = Information.getInformation().getArbeitsbereichPfad() + "konfig.xml"; if (!(new File(konfigPfad)).exists()) { Object[] possibleValues = {"Deutsch", "English"}; Object selectedValue = JOptionPane.showInputDialog( null, "", "Language", JOptionPane.INFORMATION_MESSAGE, null, possibleValues, possibleValues[0]); if (selectedValue != null && selectedValue.equals(possibleValues[0])) Information.getInformation().setLocale(new Locale("de", "DE")); else Information.getInformation().setLocale(new Locale("en", "GB")); } else { try { xmldec = new XMLDecoder(new BufferedInputStream(new FileInputStream(konfigPfad))); programmKonfig = (Object[]) xmldec.readObject(); if (programmKonfig != null && programmKonfig.length == 4) { JMainFrame.getJMainFrame().setBounds((Rectangle) programmKonfig[0]); if (szenarioDatei == null) szenarioDatei = (String) programmKonfig[1]; if (programmKonfig[2] != null && programmKonfig[3] != null) Information.getInformation() .setLocale(new Locale((String) programmKonfig[2], (String) programmKonfig[3])); } } catch (Exception e) { e.printStackTrace(Main.debug); } } // adapt dialog buttons to current language, since Java does not do this // automatically UIManager.put("OptionPane.cancelButtonText", messages.getString("main_dlg_CANCEL")); UIManager.put("OptionPane.noButtonText", messages.getString("main_dlg_NO")); UIManager.put("OptionPane.okButtonText", messages.getString("main_dlg_OK")); UIManager.put("OptionPane.yesButtonText", messages.getString("main_dlg_YES")); splashScreen = new SplashScreen("gfx/allgemein/splashscreen.png", null); splashScreen.setVisible(true); splashScreen.setAlwaysOnTop(true); GUIContainer.getGUIContainer().initialisieren(); long splashTime = new Long(System.currentTimeMillis()); if (szenarioDatei != null) { try { SzenarioVerwaltung.getInstance() .laden( szenarioDatei, GUIContainer.getGUIContainer().getGUIKnotenItemList(), GUIContainer.getGUIContainer().getCablelist()); } catch (Exception e) { e.printStackTrace(Main.debug); } } else { SzenarioVerwaltung.getInstance() .laden( GUIContainer.getGUIContainer().getGUIKnotenItemList(), GUIContainer.getGUIContainer().getCablelist()); } GUIContainer.getGUIContainer().setProperty(null); GUIContainer.getGUIContainer().updateViewport(); try { Thread.sleep(10); } catch (Exception e) { } GUIContainer.getGUIContainer().updateCables(); splashTime = System.currentTimeMillis() - splashTime; // time difference // since // Splashscreen // made visible Main.debug.println("Splash Screen shown for " + splashTime + " ms"); if (splashTime < 1000) { try { Thread.sleep(1000 - splashTime); } catch (Exception e) { } } // sleep until 1s is over splashScreen.setAlwaysOnTop(false); splashScreen.setVisible(false); }