2016-11-08 1 views
-1

Ich versuche, die Zeit in einer Datenbank zu speichern, wenn sich ein Benutzer abmeldet oder sich am Computer anmeldet, aber wenn ich meinen Computer abmelde speichert meine aktuelle Zeit nicht in der Datenbank, wo, wenn ich ctrl+c auf der Konsole drücke oder das Programm von NETBEANS beende, speichert es die Abmeldezeit auch. Wo mache ich es falsch? Bitte hilf mir dabei. Unten ist mein Code. Vielen Dank im Voraus.Kann die Abmeldezeit auf dem Computer-Abmelden mit Java Shutdown Hook nicht speichern

public void logoutTime() throws Exception { 

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 
     @Override 
     public void run() { 

      SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss"); 
      String time = String.format(sdf1.format(calendar.getTime())); 

      Globals.globalClockBean.setLogout_time(time); 
      try { 
       cd.insert(Globals.globalClockBean); 
      } catch (Exception ex) { 
       Logger.getLogger(ClockController.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      System.out.println("Closing: Logged out at yayyyyyyyyy: " + time); 

      System.out.println(sdf1.format(calendar.getTime())); 
     } 

    })); 
+0

Haben Sie die logoutTime() Methode irgendwo explizit aufgerufen? – user6904265

+0

Ja, das habe ich getan ... 'if (hashedPassword.equals (pass)) { System.out.println (" Sie sind eingeloggt als "+ loginUsername); ClockView cv = neue ClockView(); cv.loginTime(); cv.logoutTime(); cv.timerStart(); cv.stopTimer(); cv.elapsedTime(); } else { System.out.println ("Falsches Passwort. Versuchen Sie Agian"); } ' –

Antwort

3

Meine Vermutung ist, dass, wenn Sie sich abmelden, das Betriebssystem heruntergefahren wird, die Datenbank vor dem JMV Shutdown-Hook aufgerufen wird. Also, wenn Sie versuchen, die DB aufzurufen, ist es tatsächlich down.

Versuchen Sie, eine Dateiprotokollfunktion einzurichten, und überprüfen Sie, ob eine Ausnahme protokolliert wird, nachdem Sie sich vom Computer abgemeldet haben. Meine Vermutung ist, dass es eine Art "Ausnahmefehler" gibt

+0

das ist genau das, was ich dachte, aber ich weiß nicht, wie das zu sortieren ... :( –

+0

Ich versuchte dies mit Logger aber nach dem Beenden des Programms von der Konsole durch Drücken von' Strg + c' es begann den Timer ich wieder und dann versucht, mit dem System abzumelden und es weg zu herunter aber nichts geschah 'Globals.globalClockBean.setLogout_time (Zeit);. try { cd.insert (Globals.globalClockBean); Logger logger2 = Logger. getlogger2.info ("Herunterfahren 2"); } catch (Ausnahme ex) { Logger.getLogger (ClockController.class.getName()). log (Level.SEVERE, null, z); } ' –

+1

vielleicht in den catch-Block (wenn DB einfügen fehlschlägt) können Sie es in eine temporäre Datei schreiben und wenn Ihre Anwendung erneut startet, wird es diese Datei lesen und den entsprechenden Datensatz in DB einfügen ... aber das ist eine wirklich seltsame Lösung – Igor

1

Wenn Sie sich einfach von Ihrem Computer abmelden, wird der jvm nicht heruntergefahren, dann wird der Hook nicht aufgerufen.

+0

also wie kann ich das tun? Was soll ich tun, damit es so läuft, wie ich es möchte? –

Verwandte Themen