tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
17
ZUGRIFFE
821
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    lonol15 lonol15 ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    78
    Hi,
    ich will noch einige Dinge erledigen wenn das Programm geschlossen wird.
    Ich stell mir das ungfär so vor:

    Code java:
    1
    2
    3
    4
    
    if(            "Programm.isClosed()"              )
    {
        mach das und das...
    }

    Gibt es da irgendein Methode?
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Hi

    welche Programmart (Konsole, Applet, ...)?
    Wie wird geschlossen?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    lonol15 lonol15 ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    78
    Sorry hab ich vergessen zu sagen.
    Es geht um ein Konsolen-Programm.
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    So was?

    Code java:
    1
    2
    3
    4
    5
    6
    
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
     
        public void run() {
            //Hier dein Code. Der sollte aber nicht zu lange dauern!
        }
    }));

    http://docs.oracle.com/javase/1.4.2/...lang.Thread%29
    lonol15 bedankt sich. 

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Und wie wird geschlossen?
    Vom Programm ausgehend
    oder per Klick auf das X oben rechts
    oder bei Taskmanager etc.
    ...?

    CPoly, du bist schnell...
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #6
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von sheel Beitrag anzeigen
    CPoly, du bist schnell...
    Das ist manchmal Zufall, was ich so bei den neuesten Beiträgen entdecke. Den Code konnte ich aus einem aktuellen Projekt von mir kopieren
     

  7. #7
    lonol15 lonol15 ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    78
    1.Ich will die Konsole mit X schließen.
    2.Shutdownhook wird doch ausgelöst wenn das Betriebssystem runterfährt nicht wenn ich das Progamm schliesse.
     

  8. #8
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von lonol15 Beitrag anzeigen
    2.Shutdownhook wird doch ausgelöst wenn das Betriebssystem runterfährt nicht wenn ich das Progamm schliesse.
    Ich habe doch den Link zur Doku gepostet, also gibt es doch eigentlich nichts zu spekulieren?

    The Java virtual machine shuts down in response to two kinds of events:

    The program exits normally, when the last non-daemon thread exits or when the exit (equivalently, System.exit) method is invoked, or

    The virtual machine is terminated in response to a user interrupt, such as typing ^C, or a system-wide event, such as user logoff or system shutdown.

    Und nochmal in fett The program exits normally.
    lonol15 bedankt sich. 

  9. #9
    lonol15 lonol15 ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    78
    Danke XD
    Ich hate es anders in Erinnerung. SRY
     

  10. #10
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von lonol15 Beitrag anzeigen
    Danke XD
    Ich hate es anders in Erinnerung. SRY
    Ist ja nicht schlimm. Der Vollständigkeit halber hier der Beweis (das hat man in wenigen Sekunden erstellt )

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    class Shutdown {
        public static void main(String[] args) throws Exception {
     
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
                public void run() {
                    System.out.println("Wird beendet.");
                }
            }));
     
            System.in.read();
        }
    }

    Egal, ob ich strg+c benutz oder das Konsolen Fenster schließe, es kommt die Ausgabe. Auch wenn ich von einer anderen Konsole aus das kill Signal sende, kommt auf der anderen Konsole die Ausgabe
    lonol15 bedankt sich. 

  11. #11
    lonol15 lonol15 ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    78
    Funktioniert leider nicht.
    Ich hab alles gemacht wie beschrieben.(auch mithilfe von einem Buch muss also stimmen)

    Noch andere Ideen?

    edit:
    Hat sich erledigt.
    Mit strg+c funktionierts, das reicht fürs erste.
    Geändert von sheel (26.11.11 um 21:50 Uhr) Grund: Doppel
     

  12. #12
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    ShutdownHooks werden eventuell nicht ausgeführt, wenn du das Konsolen-Fenster mit 'X' schließt.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  13. #13
    lonol15 lonol15 ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    78
    Mit Strg+c macht er auch nicht unbedingt alles.
     

  14. #14
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Richtig. Weil bei beiden das Programm „hart“ beendet wird.
    lonol15 bedankt sich. 
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  15. #15
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    ein normaler ShutdownHook reicht dafür (wie zuvor bereits erwähnt wurde) nicht aus...
    Um diese Funktionalität zu realisieren müsste man entweder mit einem Launcher Wrapper arbeiten oder neben dem Anwendungsprozess einen "Watchdog"-Prozess zur Überwachung des Anwendungsprozesses starten.

    Letzteres sei hier mal kurz illustriert:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    
    package de.tutorials.training;
     
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
     
    import javax.swing.JOptionPane;
     
    public class WatchedAppExample {
     
        public final static int trackerPort = 9999;
     
        public static void main(String[] args) throws Exception {
            new WatchedAppExample().run();
        }
     
        private void run() throws Exception {
            startTrackerServer();
     
            TimeUnit.SECONDS.sleep(1);
     
            startTrackerClient();
     
            appLogic();
     
        }
     
        private void appLogic() throws InterruptedException {
            while (true) {
                System.out.println("working ...");
                TimeUnit.SECONDS.sleep(1);
            }
        }
     
        private void startTrackerServer() {
            Executors.newSingleThreadExecutor().execute(newTrackerServer());
        }
     
        private Runnable newTrackerServer() {
            return new Runnable() {
                @Override
                public void run() {
                    try {
                        ServerSocket ss = new ServerSocket(trackerPort);
                        Socket s = ss.accept();
                        OutputStream out = s.getOutputStream();
                        while (true) {
                            out.write(1);
                            out.flush();
                            TimeUnit.SECONDS.sleep(1);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
        }
     
        private void startTrackerClient() throws Exception {
            new ProcessBuilder("cmd", "/c", "start", "javaw", "-cp", new File(
                    getClass().getProtectionDomain().getCodeSource().getLocation()
                            .toURI()).getAbsolutePath(),
                    TrackerClient.class.getName()).start();
     
        }
     
        public static class TrackerClient {
            public static void main(String[] args) throws Exception {
                Socket socket = new Socket("localhost", trackerPort);
                InputStream in = socket.getInputStream();
                try {
                    while (true) {
                        int b = -1;
                        while ((b = in.read()) != -1) {
                        }
                    }
                } catch (IOException e) {
                    // e.printStackTrace(); app killed
                }
                JOptionPane.showMessageDialog(null, "The app was killed!");
            }
        }
     
    }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 28.01.09, 11:05
  2. Befehl auf Konsole ausführen
    Von killerbees19 im Forum Java
    Antworten: 10
    Letzter Beitrag: 18.07.07, 16:10
  3. PHP in der Konsole ausführen?
    Von Kopfballstar im Forum PHP
    Antworten: 9
    Letzter Beitrag: 08.06.07, 15:10
  4. Fenster schliessen .. Funktion ausführen
    Von Nabi im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 01.06.07, 07:40
  5. Befehl ausführen, direkt vor dem schliessen des Fensters
    Von Ferum im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 10.04.07, 10:14