Wird Programm gerade beendet?

Status
Nicht offen für weitere Antworten.

r0bbe

Mitglied
Hi,

Ich brauch nen kleines Tool, dass in eine Textdatei schreibt wann der PC gestartet wurde und wann er runtergefahren wurde.
Ersteres funktioniert schon, aber jetzt muss ich irgendwie bevor das Programm beendet wird (also wenn Windows gerade runterfahren will) noch schnell die Uhrzeit in die Textdatei schreiben.

Wie mach ich das? Damals in VB gab es eine QueryShutdown() Funktion oder so ähnlich mit der sowas ging, wie sieht das in java aus?

Danke schonmal :>
 

r0bbe

Mitglied
Dankeschön, so richtig verstehen tu ich das leider nicht, mit Threats haben wir uns noch nicht beschäft.
Ich hab nen Codeschnipsel gefunden, ich glaub das passt jetzt sogar so weit, allerdings scheint er das auch auszuführen, wenn sich das Programm regulär beendet, weil es fertig ist.

Up: Mon Apr 20 15:11:00 CEST 2009
Down: Mon Apr 20 15:11:00 CEST 2009

Ich hab schon versucht 'ne Endlosschleife um das Thread Gedöns zu machen, aber wie ich erwartet habe war das keine so gute Idee :D

Java:
package system.utilitys;

import java.util.Date;
import java.io.File;
import io.*;


public class UptimeSpy {
	
	public static void main(String[] args) {
		final File file = new File("C:\\Dokumente und Einstellungen\\r0bbe\\Desktop\\uptimeSpy.txt");
		WriteFile.write(file, true, "Up: \t" + getDate());
		
		// Werde ich beendet?
		Runtime.getRuntime().addShutdownHook(new Thread() {
	           public void run() {
	  		WriteFile.write(file, true, "Down: \t" + getDate()+"\r\n");
	           }
		});
		
	}
	
	public static String getDate() {
		Date currentDate = new Date();
		return currentDate.toString()+"\r\n";
	}
}

Hmm :)
 
Zuletzt bearbeitet von einem Moderator:

Ebenius

Top Contributor
Du kannst ja mal ans Ende der Deiner main-Methode das da schreiben:
Java:
final Object monitor = new Object();
synchronized (monitor) {
  // wait for eternity
  try {
    monitor.wait();
  } catch (InterruptedException ex) {
    // ignore
  }
}
Ebenius
 

r0bbe

Mitglied
Danke, hab ich gemacht, jetzt schreibt er keine Downtime mehr in die Datei wenn ich das Programm in Eclipse stoppe.
Würde er das tun wenn ich das Programm über die Console starte und dann Windows herunterfahre?

Leider kann ich das nicht testen, weil ich beim Classpath (vermute ich) immer noch irgendwas falsch mache, er meckert er findet die Klasse WriteFile nicht, ich versteh nicht warum :(
In Eclipse kann ich das Problem lösen, indem ich dieses Project dem BuildPath hinzufüge, sonst kreidet er mir das auch rot an, ich versteh aber nicht warum!! Was soll ich denn noch machen außer den Classpath zu setzen, damit er weiß wo er die Klassen, die ich importiere suchen soll? :(
Ich wollte keinen neuen Thread erstellen, weil ich weiß dass die Frage recht oft kommt, leider krieg ichs trotzdem ned gebacken, grml...

Name: CLASSPATH (oder muss ich das vllt klein schreiben?)
Wert: C:\Programme\Java\jdk1.6.0_07\lib;C:\Dokumente und Einstellungen\r0bbe\workspace;.

Name: Path
Wert: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Programme\Java\jdk1.6.0_07\bin

In meinem Workspace sind meine Projekte, wer hätte das gedacht und die Klasse die er nicht findet liegt konkret in:
C:\Dokumente und Einstellungen\r0bbe\workspace\IO\src\io\WriteFile.java

[Java]
package system.utilities;

import java.util.Date;
import java.io.File;
import io.*;


public class UptimeSpy {

public static void main(String[] args) {
final File file = new File("C:\\Dokumente und Einstellungen\\r0bbe\\Desktop\\uptimeSpy.txt");
WriteFile.write(file, true, "Up: \t" + getDate());

// Werde ich beendet?
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
WriteFile.write(file, true, "Down: \t" + getDate()+"\r\n");
}
});

final Object monitor = new Object();
synchronized (monitor) {
// wait for eternity
try {
monitor.wait();
} catch (InterruptedException ex) {
// ignore
}
}
}

public static String getDate() {
Date currentDate = new Date();
return currentDate.toString()+"\r\n";
}
}
[/Java]

[Java]
package io;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class WriteFile {
...........
}
[/code]

C:\Dokumente und Einstellungen\r0bbe\workspace\UptimeSpy\bin>java system.utilities.UptimeSpy
Code:
Fehlermeldung ohne BuildPath zu verändern:

C:\Dokumente und Einstellungen\r0bbe\workspace\UptimeSpy\bin>java system.utilities.UptimeSpy
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        WriteFile cannot be resolved
        WriteFile cannot be resolved

        at system.utilities.UptimeSpy.main(UptimeSpy.java:12)

Fehlermeldung, wenn ich das Projekt IO in den buildPath aufnehme:
Code:
C:\Dokumente und Einstellungen\r0bbe\workspace\UptimeSpy\bin>java system.utilities.UptimeSpy
Exception in thread "main" java.lang.NoClassDefFoundError: io/WriteFile
        at system.utilities.UptimeSpy.main(UptimeSpy.java:12)
Caused by: java.lang.ClassNotFoundException: io.WriteFile
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        ... 1 more

Tut mir leid für die nervige Frage, aber ich bin verzweifelt.
Ich sag ihm wo er zu suchen hat und er findet es einfach nicht..
 

Ebenius

Top Contributor
Danke, hab ich gemacht, jetzt schreibt er keine Downtime mehr in die Datei wenn ich das Programm in Eclipse stoppe.
Würde er das tun wenn ich das Programm über die Console starte und dann Windows herunterfahre?
Ja. Du kannst das Programm ja mal im Eclipse starten und dann den Task über den TaskManager (End Task bzw. Task beenden) beenden. Dann wird die Anwendung geschlossen. Wenn Du die Anwendung über Eclipse beendest (rotes Viereck), dann wird der Prozess gestoppt (sowas wie kill -9 unter Windows) und nicht die Anwendung beendet (kill -15).

Leider kann ich das nicht testen, weil ich beim Classpath (vermute ich) immer noch irgendwas falsch mache, er meckert er findet die Klasse WriteFile nicht, ich versteh nicht warum :(
Java benutzt einen CLASSPATH, um Klassen zu finden. Du gibst in Deinem Java-Aufruf keinen CLASSPATH an, also wird der Standard-CLASSPATH verwendet. Dieser benutzt alle Einträge der Umgebungsvariable CLASSPATH und das derzeitige Arbeitsverzeichnis. Die CLASSPATH-Variable kann man sich auf der Kommandozeile so ausgeben lassen; Einträge sind im Windows mit Semikolon getrennt:
Code:
echo "%CLASSPATH%"
Deine WriteFile befindet sich in einem anderen Eclipse-Projekt als Deine Start-Klasse. Deswegen findet Java die Klasse nicht. So funktioniert's:
Code:
java -cp ".;C:\Dokumente und Einstellungen\r0bbe\workspace\IO" system.utilities.UptimeSpy
Ebenius
 

r0bbe

Mitglied
Welchen task? *g*
Es gibt keinen UptimeSpy im task manager, ich hab jetzt mal javaw.exe beendet, und beim zweiten Versuch eclipse. Aber ich glaub der Code ist noch fehlerhaft, weil ich hab mir auch 'ne *.jar gemacht und dann neugestartet, er schreibt nur das UP in die Datei.

Wozu der Classpath gut ist war mir schon klar, spricht ja auch eigentlich nichts dagegen, dass er den Standard Classpath benutzt aber er tut es ja nicht, sonst würde er die Klasse doch finden oder?

hab's jetzt nochmal explizit angegeben:

Code:
C:\Dokumente und Einstellungen\r0bbe\workspace\UptimeSpy\bin>echo "%CLASSPATH%"
"C:\Programme\Java\jdk1.6.0_07\lib;C:\Dokumente und Einstellungen\r0bbe\workspace;."

C:\Dokumente und Einstellungen\r0bbe\workspace\UptimeSpy\bin>java -cp ".;C:\Dokumente und Einstellungen\r0bbe\workspace\IO" system.utilities.UptimeSpy
Exception in thread "main" java.lang.NoClassDefFoundError: io/WriteFile
        at system.utilities.UptimeSpy.main(UptimeSpy.java:12)
Caused by: java.lang.ClassNotFoundException: io.WriteFile
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        ... 1 more

:(
 

Ebenius

Top Contributor
Welchen task? *g*
java oder javaw.

hab's jetzt nochmal explizit angegeben: [...]

C:\Dokumente und Einstellungen\r0bbe\workspace\UptimeSpy\bin>java -cp ".;C:\Dokumente und Einstellungen\r0bbe\workspace\IO" system.utilities.UptimeSpy
Sorry, da hab ich gepennt. Muss natürlich das bin-Verzeichnis sein:
Code:
java -cp ".;C:\Dokumente und Einstellungen\r0bbe\workspace\IO\bin" system.utilities.UptimeSpy
Ebenius
 

r0bbe

Mitglied
Öhm

Tatsache, jetzt geht alles :)

Up: Thu Apr 23 10:28:31 CEST 2009
Down: Thu Apr 23 10:28:34 CEST 2009

(wenn ich das Projekt in Eclipse vorher noch dem build path hinzufüge, sonst altes Problem.)

Ich hätte gedacht der ist so clever und durchsucht Classpath + unterverzeichnisse, vielen Dank für deine Hilfe :)
 

Ebenius

Top Contributor
Classpath + unterverzeichnisse
Auch wenn das komfortabel klingt, es wäre furchtbar. Das CWD ist normaler Weise im CLASSPATH. Stell Dir vor Du rufst jetzt auf: [Highlight=Bash]ebenius@workhorse:/> java com.ebenius.MyApplication[/Highlight]
Das CWD ist '/' (im UNIX also die Wurzel des gesamten Dateisystems; und in UNIX heißt's ja so schön: Everything's a file). Soll Java den gesamten Rechner untersuchen, um meine Klasse zu finden?

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
F Erste Schritte Programm wird nicht geladen Java Basics - Anfänger-Themen 2
J Programm was üer Runtime.getRuntime gestartet wird erkennt String Parameter nicht Java Basics - Anfänger-Themen 0
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
G Programm wird nicht ausgeführt: Editor does not contain a main type Java Basics - Anfänger-Themen 10
snipesss IDE zeigt keine Fehler an, Programm wird jedoch nicht ausgeführt. Java Basics - Anfänger-Themen 18
J Programm wird nicht auf der Konsole ausgeführt Java Basics - Anfänger-Themen 2
M Programm wird nicht richtig ausgeführt Java Basics - Anfänger-Themen 4
X Programm wird frühzeitig beendet Java Basics - Anfänger-Themen 17
M Java-Programm wird beendet, wenn ich Spiel öffne... Java Basics - Anfänger-Themen 11
T Programm wird immer langsamer Java Basics - Anfänger-Themen 10
T Ordner herausfinden, aus dem das Programm aufgerufen wird Java Basics - Anfänger-Themen 5
H return wird im Programm angeblich vermisst Java Basics - Anfänger-Themen 2
L Eingabe von "java programm x", x wird im programm Java Basics - Anfänger-Themen 2
T Programm so abbrechen, dass finally ausgeführt wird Java Basics - Anfänger-Themen 7
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
P Webseite vom Smartmeter wird nur unleserlich angezeigt Java Basics - Anfänger-Themen 7
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Oneixee5 Maven Plugin wird 2 mal ausgeführt Java Basics - Anfänger-Themen 10
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
F Session wird mehrfach erzeugt Java Basics - Anfänger-Themen 11
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
kodela Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 3
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
H Wie wird ein String intern gespeichert? Java Basics - Anfänger-Themen 10
A char array wird überschrieben Java Basics - Anfänger-Themen 6
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
S setContentView(R.Layout.XXX) wird Rot angezeigt Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben