Hallo an alle!
Ich versuche gerade ein jlabel oder jbutton zu basteln mit dem ich meinen rechner herunterfahren kann! Das jlabel soll in einem jpanel sein! Mit diesem code macht er es einfach nicht es erscheint nur kurz ein ein schwarzes Fenster !
Tschuldigung, wenn ich das hier in den Thread schreibe, aber mal so als Frage:
Kann man nicht mithilfe von APIs auf "native" Methoden von OSsen u.Ä. zurückgreifen?
Ich mein... dazu sind die Dinger ja da: Ereiterung von Möglichkeiten...
Klar geht das auch mit nativen Funktionen, aber...
Das Motto von java ist halt Write Once, Run anywhere.
und das stimmt hier definitiv nicht.
Daher bin ich auch der Meinung, das derartige Dinge nicht mit Java gemacht werden (sollten)
Du kannst ja die JVM beenden (läuft überall) und es ist Aufgabe der Umgebung, den Prozess zu überwachen und vielleicht den Rechner neu zu starten (nicht Java, sondern OS-spezifisch).
Einen ähnliche Hemmschwelle sehe ich beispielsweise mit "Stored procedures" via JDBC. Diese sind eindeutig spezifisch für eine Datenbank und laufen daher nicht überall.
Sicherlich gibt es manchmal Schwierigkeiten von der Lehre abzuweichen und sich der Praxis zu stellen.
Ob das hier aber gegeben ist, einfach mal so den Rechner runterzufahren, wage ich zu bezweifeln
@TO
du hast mal scheinbar überhaupt keine ahnung von "sub-processes" oder ?
wenn du aus java heraus deine windows-kiste runterfahren willst brauchst du dafür die runtime "C:\Windows\System32\shutdown.exe"
DAS ist der PFAD zur datei ... nur DAS ... alles andere sind PARAMETER ! und diese kannst du natürlich NICHT mit in den pfad packen
außerdem zeigt der thread das du vermutlich sehr schlecht in englisch bist, denn wenn du von einem programm etwas in richtung "usage" bekommst, dann will dir das programm damit sagen "wie man es verwendet" -> "(to) use" > benutzen
ergo : du musst dir eine möglichkeit suchen mit der du sowohl eine datei als sub-prozess ausführen als auch dieser weitere parameter mitgeben kannst
Desktop.open() ist dafür also schon mal die komplett falsche wahl, denn laut DOC (die du vermutlich nicht gelesen hast, oder wenn man noch weiter geht vielleicht auch gar nicht im stande dazu bist) : "öffnet die übergebene datei mit ihrem standard-programm"
klar sollte das unter windows mit ".exe" in die richtung funktionieren das diese dann selbst gestartet werden, ist aber eigentlich nicht sinn und zweck
also greift man auf das ur-alt hilfsmittel für sub-processing in java schlecht hin zurück : Runtime.exec(String);
wie auch wieder der DOC zu entnehmen übergibt man dieser methode kein File oder ein Pfad zu einem, sondern ein sog. "Kommando", also z.b. so eins wie man im "Befehlszeileninterpreter" CMD eingibt
da es sich bei CMD jedoch um einen komplexen interpreter handelt und Runtime.exec() im innere doch irgendwie anders abläuft ist es gerade mal gut genug dafür einfache sub-prozesse zu starten
sehr viel besser und bequemer kann man dank Java5 mit dem ProcessBuilder arbeiten
dieser bietet viele möglichkeiten von der einfachen angabe des auszuführenden pfades über die mitgabe von parametern bis hin zu komplexen manipulationen der umgebung
WENN du also aus java heraus ein windows-system herunterfahren möchtest, wäre das mit folgenden code möglich
So wie es Ditoran geschrieben hat funktioniert es !
Es zeigt halt ein Fenster an in dem steht das der pc in weniger als einer Minute heruntergefahren wird!
Danke an alle und einen guten Rutsch ins neue Jahr!!!
Java:
String[] run ={"shutdown","/s"};try{Runtime.getRuntime().exec(run);}catch(Exception ex){ ex.printStackTrace();}
Seht euch jetzt dazu mal den 3. Beitrag an.
Da ist eine API, mit deren Hilfe man den PC runterfahren kann...
Ja klar...
Es wird kein so großer Unterschied sein, ob man jetzt ne Batch startet, die das macht oder die "ActiveXComponent" etwas Ähnliches/Gleiches aufruft, aber man braucht keine zusätzliche Batch-Datei
@eMmiE
wow, da hatte aber jemand echt gut lange weile
klar, auch wenn es sicher sinnvoll erscheint eine WMI-brücke zu bauen, meinst du nicht das man damit den bogen deutlich überspannt ?
welchen sinn soll es denn haben wenn man erstmal die VM bemühen muss, dann noch ne LIB braucht die irgendeinen native-krams macht nur um das commando abzusetzen das kiste terminieren soll ?
ob man nun ein JAR anklickt oder eine BAT, es bleibt der nötige lästige doppel-klick
wobei von der klick-anzahl her auch start > herunterfahren nicht mehr aufwand ist
aber naja ... es gibt immer wieder welche die den bogen einfach überspannen ...
dann gebt euch doch gleich solaris
Hallo an alle und noch ein frohes neues!
Mit start und herunterfahren geht es nicht da ich meinen Screen über den kompletten Bildschirm mache !
Habe es nun so gemacht und so funktioniert es auch!
Java:
publicvoidmouseClicked(MouseEvent me){String[] run ={"shutdown","/s"};try{Runtime.getRuntime().exec(run);}catch(Exception ex){
ex.printStackTrace();}}});