shutdown

SiDeu

Aktives Mitglied
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 !
Java:
Desktop.getDesktop().open( new File("C:/Windows/System32/shutdown.exe") );
 

SiDeu

Aktives Mitglied
Danke für die schnelle Antwort du hilfst mir echt bei vielen Sachen danke danke!
Aber leider weis ich nicht genau wie du das meinst!
Java:
Desktop.getDesktop().open( new File("C:/Windows/System32/shutdown.exe /s") );
funktioniert auch nicht!
 

Ditoran

Mitglied
Versuche mal folgendes:

Java:
String[] run = { "shutdown", "/s" };
try {
	Runtime.getRuntime().exec(run);
} catch (Exception ex) {
	ex.printStackTrace();
}
 

turtle

Top Contributor
Mehr als die JVM runterzufahren, kann dir Java nicht anbieten, denn das ist abhängig vom OS.

Selbst dein versuch kann ja wohl nur unter Windows klappen und auch nur dann wenn du eine C:\ Partition hast. Und beides ist nicht immer wahr.
 

SiDeu

Aktives Mitglied
Aber den gesamten Rechner kann ich schon runterfahren ?????

Java:
     JLabel jl13 = new JLabel(" ");
     jl13.setBounds(50, 1000, 50, 50);
     
     String[] run = {"shutdown" , "{s"};   	
     jl13.addMouseListener(new MouseAdapter() {
    	 
    	 try {
    		 Runtime.getRuntime().exec(run);
    	 }
       	  
     }	catch(Exception ex) {
    	 ex.printStackTrace();
    	 
     }

so funktioniert es nicht

Java:
     JLabel jl13 = new JLabel(" ");
     jl13.setBounds(50, 1000, 50, 50);
     
 
     jl13.addMouseListener(new MouseAdapter() {
    	 
 
			public void mouseClicked(MouseEvent me) {

				try {
					Desktop.getDesktop().open( new File("C:/Windows/System32/shutdown.exe/Useage/s") );
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				System.out.println("Wurde geklickt...");

			}
		});

und so auch nicht

Fehlermeldung :

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: The file: C:\Windows\System32\shutdown.exe\Useage\s doesn't exist.
 

eMmiE

Bekanntes Mitglied
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...

Gruß eMmiE
 

turtle

Top Contributor
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
 

Sen-Mithrarin

Gesperrter Benutzer
@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


Java:
(new ProcessBuilder("C:/Windows/System32/shutdown.exe", "/s", "/f", "/t 0")).start();



oder du machst das ganze einfach mit ner schlichten BATch

Code:
shutdown /s /f /t 0


denn java ist NICHT dafür entwickelt wurden um system-befehle auszuführen, dafür hat jedes system sein eigenes spielzeug
 

SiDeu

Aktives Mitglied
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();}
 
Zuletzt bearbeitet:

Like-Eclipse

Mitglied
He Leute, warum googlelt ihr nicht einfach mal ?
Ich würde einfach
Java:
String shutdownCmd = "shutdown -s"
Process child = Runtime.getRuntime().exec(shutdownCmd);
Hier habe ich das her!

Like-Eclipse :applaus:
 
Zuletzt bearbeitet:

eMmiE

Bekanntes Mitglied
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
 

Sen-Mithrarin

Gesperrter Benutzer
@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
 

eMmiE

Bekanntes Mitglied
Es geht ja darum, das man aus einem Java-Programm den PC runterfahren kann
-> Erweiterung der Möglichkeiten in meinem kleinen Java-Universum :toll:

Gruß eMmiE
 

SiDeu

Aktives Mitglied
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:
public void mouseClicked(MouseEvent me) {

					String[] run = { "shutdown", "/s" };
					try {    
						Runtime.getRuntime().exec(run);
						} catch (Exception ex) {   
							ex.printStackTrace();
							}
						}
					});

Danke für eure vielen Antworten!
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Ähnliche Java Themen

Neue Themen


Oben