Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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?
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
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";
}
}
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;.
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
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]
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..
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
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
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?