Auf herunterfahren des PCs reagieren und Datensatz update machen

Lit-Web

Aktives Mitglied
Hallo Leute,

ich bin dabei eine Arbeitszeiterfassung für unsere Entwickler zu programmieren, dafür nutze ich awt, swing.

Das ganze basiert auf einer Datenbank die auf einem Webserver liegt.

Das manuelle durch den Entwickler auslösende speichern der Daten funktioniert ohne Problem, beim kommen drückt er auf den Button und die Zeit wird gespeichert, beim gehen genau das selbe. Nun gehts aber darum, dass es dem Mitarbeiter auch passieren kann wenn er heim gehen will den geht Button zu drücken und den PC einfach herunter fährt. Da will ich nur mit einem kleinen Hintergrundprogramm reagieren und automatisch die geht Zeit ergänzen.

Meine Frage, geht das, also das überhaupt möglich so umzusetzen, wenn ja was muss ich mir dazu eventuell anschauen um eine Lösung erarbeiten zu können?

Vielen Dank für eure Zeit und Tipps. Gruß Lit-Web
 

faetzminator

Gesperrter Benutzer
Hab mal ein keines dirty Programm für einen Arbeitskollegen geschrieben, welches in etwa das gleiche macht. Allerdings ist gar keine Action erforderlich, ich update einfach im Hintergrund alle 30sec den Datensatz. Ist vielleicht nicht optimal, aber zielführend ;)
 

Lit-Web

Aktives Mitglied
Hmm, danke für eure Antworten, aber das ist mir nicht wirklich verlässlich genug und alle 30 Minuten updaten kann eben automatisierte Verfälschungen zu ungunsten des Mitarbeiters mit sich bringen.

Ich denke ich werde, wenn der Mitarbeiter sich einloggt und am Vortag vergessen hat den geht Button zu drücken ihn mit einem Dialog begrüßen das er die letzte geht Zeit nachtragen soll.

Falls noch jemand eventuell eine bessere Idee hat, dann vielen Dank.
 
T

Tomate_Salat

Gast
Speicher doch die Daten lokal z.B. in einer H2-embedded-Datenbank. Beim speichern setzt du ein Flag oder bereinigst die Datensätze komplett. Ansonsten bringst du bei Progrmamstart eine Meldung, dass noch Änderungen vorhanden sind. Das speichern könnte dann passieren, wenn der Anwender das Feld verlässt.

Muss natürlich keine Datenbank sein. Aber einfach, dass du den aktuellen State gesichert hast.
 

Lit-Web

Aktives Mitglied
Sei mir nicht böse aber das verstehe ich grad nicht ganz, die Daten werden in einer Mysql Datenbank auf einen Firmeninternen Webserver gespeichert.

Also dem Server der im Intranet erreichbar ist.
 
T

Tomate_Salat

Gast
Ich versuchs nochmal :D.

Also, sobald der Anwender Änderungen im Programm machst speicherst du diese lokal (datenbank, xml, text-datei oder sonst etwas). Wird das Programm unerwartet beendet, dann hast du immernoch eine Datei mit dem letzten Änderungen. Dadurch kannst du diese beim Programmstart wiederherstellen. Drückt der Benutzer jetzt auf "speichern", dann sendest du die Daten an den Server.

Die Daten die du lokal hälst kannst du dann wieder löschen.
 

Lit-Web

Aktives Mitglied
Ich versuchs nochmal :D.

Also, sobald der Anwender Änderungen im Programm machst speicherst du diese lokal (datenbank, xml, text-datei oder sonst etwas). Wird das Programm unerwartet beendet, dann hast du immernoch eine Datei mit dem letzten Änderungen. Dadurch kannst du diese beim Programmstart wiederherstellen. Drückt der Benutzer jetzt auf "speichern", dann sendest du die Daten an den Server.

Die Daten die du lokal hälst kannst du dann wieder löschen.

Ok danke jetzt habe ich das verstanden.

Das wäre auch eine Idee, ich werde die Ideen meinem Chef mal nahe bringen und dann sehen was er dazu sagt.

Ich dachte erst ich kann mit einem Java Backendprogramm auf das Event herunterfahren aus dem Windows reagieren. Ich dachte das im Betriebssystem Hintergrund irgendwo etwas passiert wo ich mit dem Java Programm zugreifen kann.
 
T

Tomate_Salat

Gast
Ich dachte erst ich kann mit einem Java Backendprogramm auf das Event herunterfahren aus dem Windows reagieren. Ich dachte das im Betriebssystem Hintergrund irgendwo etwas passiert wo ich mit dem Java Programm zugreifen kann.

Geht ja auch, nur nicht vllt immer so zuverlässig, wie du es haben möchtest (wie meine Vorredner beschrieben haben).
 

Bernd Hohmann

Top Contributor
Ich würde das anders lösen. 2 Ansätze:

1) gpedit.msc Computerkonfigurationen -> Windowseinstellung -> Scripts Starten/Herunterfahren und dort ein kleines Javaprogramm ausführen was die An/Abmeldezeit in die DB einträgt. Hat den Vorteil, dass das beim Energiesparmodus des PC kein Event auslöst. Nachteil: versetzt sich der PC in den Schlafmodus weil der Entwickler in einem Meeting ist und der Mensch geht von dort direkt nach Hause (PC ist ja schon aus) klappt das nicht.

2) Vom Server aus die Workstation alle 10 Sekunden anpingen und solange sie online ist gilt das als Arbeitszeit. Nachteil: Geht der PC in den Energiesparmodus klappt das nicht mehr.

Aufpassen: Wenn der Anwender an diesem Tag schon einen Arbeitszeitbeginn eingetragen hat, darf der Wert nicht überschrieben werden (zb. nach einem Reboot).

Bernd
 

Bleiglanz

Gesperrter Benutzer
Mein Vorschlag:

In der Datenbank eine Zeile für jeden Entwickler und Tag (name, tag, anfang, ende)

Beim start des Programms schreibst du eine zeile rein mit dem entwickler, dem tag, und dem anfang und ende=anfang

dann machst du einen thread mit einer endlosschleife
Java:
    while (true) {
      //SQL: UPDATE setzte ENDE auf NOW(), das ist die Zeit in der der Entickler zuletzt gelebt hat WHERE TAG=HEUTE
      Thread.sleep(60 * 1000);
    }
Das liefert dir für jeden Tag eine Zeile mit dem Einschaltdatum und auf die Minute genau die Zeit, als der Thread noch lebte

Warum reicht das nicht?

Klar, wenn er vergisst das Programm zu beenden und seinen Rechner nicht ausschaltet war er eben bis Mitternacht da, aber das Problem kannst du nicht lösen. Er könnte ja auch vor dem Computer eingeschlafen sein :)
 

KrokoDiehl

Top Contributor
Wenn du dich auf Windows konzentrieren kannst, wäre ein anderer Weg über nativen Code (also Winapi, ggfs. mit JNA machbar). Hier in der MSDN gibt es einige Funktionen zu diesem Thema, vielleicht erfüllt dies eher deine Erwartungen. Einfach wird es bestimmt nicht ;-)

Aber ehrlich gesagt würde ich es über den ShutdownHook machen, ich denke das müsste ganz gut funktionieren.
 

Lit-Web

Aktives Mitglied
Danke euch allen für die vielen Antworten, jetzt habe ich natürlich erst mal einiges dank euch zusammen was ich meinem Chef als Diskussionsgrunlage liefern kann. Das was und wie wird sich dann sicher noch entscheiden.

@Bleiglanz

Das was du da schreibst macht Sinn. Wenn das Problem einschläft vorm PC dann kann ich darauf nicht reagieren. Jedoch drücken die Benutzer beim kommen auf "kommt" und beim gehen auf "geht". Das speichert eben auch die Zeiten wenn die zum Mittag gehen, oder eine rauchen gehen.
Es geht eben nur um den Feierabend wenn sie vergessen auf "geht" zu drücken.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N PC am Router über "shutdown" herunterfahren Java Basics - Anfänger-Themen 2
A Laufende Applikation hindert Windows am herunterfahren Java Basics - Anfänger-Themen 7
E PCs am Router herunterfahren Java Basics - Anfänger-Themen 3
R App soll selbstständig reagieren, anstatt via Models Java Basics - Anfänger-Themen 0
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
J Auf Pfeiltasten reagieren Java Basics - Anfänger-Themen 3
B Button soll sowohl auf Klicken als auch auf die Enter-Taste reagieren Java Basics - Anfänger-Themen 9
A Nach Druck eines Buttons reagieren andere Button nicht Java Basics - Anfänger-Themen 3
P Auf Button-Klick außerhalb der GUI-Klasse reagieren Java Basics - Anfänger-Themen 10
S Listener reagieren nicht mehr Java Basics - Anfänger-Themen 3
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
P mousevents bei Maus und touchscreen reagieren unterschiedlich Java Basics - Anfänger-Themen 1
J Fehlermeldung reagieren Java Basics - Anfänger-Themen 10
T Input/Output Direkt auf Eingabe reagieren Java Basics - Anfänger-Themen 8
c_sidi90 Auf Änderung im Programm reagieren. Java Basics - Anfänger-Themen 6
R Auf auswahl in ner JComboBox reagieren Java Basics - Anfänger-Themen 3
Kukulkan Java-Version (ME, SE) erkennen und darauf reagieren? Java Basics - Anfänger-Themen 35
E auf Tastatur reagieren Java Basics - Anfänger-Themen 8
J Auf ActionEvents in "anderer" Klasse reagieren Java Basics - Anfänger-Themen 2
J Auf Tastendruch reagieren Java Basics - Anfänger-Themen 4
K Auf Eingabe reagieren Java Basics - Anfänger-Themen 6
Z Auf Clipboardänderung reagieren ohne Fokus der Apllikation Java Basics - Anfänger-Themen 2
J auf ausgabe am monitor reagieren Java Basics - Anfänger-Themen 16
F JTabbedPane auf Ereignisse reagieren Java Basics - Anfänger-Themen 6
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
G GUI mit Swing - Zahlen ausgeben und auf Aktion reagieren Java Basics - Anfänger-Themen 2
G jFileChooser auf den Abbrechen-Button reagieren Java Basics - Anfänger-Themen 3
I Auf Abbruch (X) reagieren Java Basics - Anfänger-Themen 9
M JTextField auf RETURN reagieren Java Basics - Anfänger-Themen 2
raptorrs JPanel reagieren nicht auf ActionListener Java Basics - Anfänger-Themen 3
G reagieren wenn Ja gedrückt wird Java Basics - Anfänger-Themen 2
G Auf 2 Tasten reagieren Java Basics - Anfänger-Themen 10
W Innerhalb TableModel auf aktivierte Reihe reagieren Java Basics - Anfänger-Themen 3
G DefaultTreeCellRenderer auf Änderung reagieren Java Basics - Anfänger-Themen 11
B Button - auf Maus reagieren Java Basics - Anfänger-Themen 16
S Auf Ereignisse anderer Klasse reagieren! Java Basics - Anfänger-Themen 2
D JPanel soll auf Veränderungen reagieren! Java Basics - Anfänger-Themen 6
C Klasse muss auf Event in einer anderen Klasse reagieren Java Basics - Anfänger-Themen 7
G Auf Strings verschieden reagieren Java Basics - Anfänger-Themen 3
W Java Spiele reagieren langsamer Java Basics - Anfänger-Themen 3
L Bei Klick auf einen Button reagieren - Wahrer Anfänger! Java Basics - Anfänger-Themen 3
G Methoden in Menüleiste sollen auf Frame reagieren Java Basics - Anfänger-Themen 4
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
B HSQL Letzter Datensatz Java Basics - Anfänger-Themen 2
I Null als return obwohl datensatz existiert Java Basics - Anfänger-Themen 12
J Datensatz aus JTable löschen Java Basics - Anfänger-Themen 8
S datensatz löschen in Java Java Basics - Anfänger-Themen 8
S kompletten Datensatz statt nur ein Feld auslesen lassen,wie? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben