Datei öffnen - cmd.exe

Status
Nicht offen für weitere Antworten.

StickToFreak

Aktives Mitglied
Hey Leute,

Manche von euch kennen bestimmt folgendes Problem:

Es ist abends, ihr seit irgendwas am downloaden und das ganze dauert noch eine Stunde 37 Minuten und 40 Sekunden. Man will aber ins Bett. Also geht man auf Ausführen, cmd.exe, shutdown -s -t xxx . So Jetzt muss man diese 1h 37min 40sec noch in Sekunden umrechnen. Das ganze geht mir langsam auf die Nerven. :D. Ich weiß ich hab Probleme ~.~. Egal. Auf jedenfall wollte ich dann dazu etwas schreiben:

Ich hab ein Applet gemacht mit 3 Kästchen für Sekunden, Minuten und Stunden. Diese Daten trägt man ein (in dem Falle 1h 37min und 40 sec). Das ganze wird zack ausgerechnet ( 1*3600, 37*60, 40*1 um von jeden die sekunden zu bekommen). Dann hab ich zwei Buttons. Einen zum abbrechen des Shutdowns, falls es doch länger dauert und einen zum Starten. Wenn man jetzt auf den "Start" klickt soll sich, unsichtbar oder nicht, "cmd.exe" öffnen bzw die normale cmd Konsole und dort hineinschreiben -was ich schon in einem String definiert habe: shutdown -s -t . Die Zeit wird dann per Variable der ausgerechneten Zeit angegeben. Also soll er das ganze ungefähr so schreiben: "shutdown -s -t "o. (o = die Variable für die Zeit in Sekunden). Soweit so gut, das ganze funktioniert aber nicht weil ich nicht weiß, wie man die cmd Konsole öffnen soll und das andere dann reingeschrieben werden soll. Ich hab schon Beiträge gelesen wie das Öffnen vom Desktop oder irgendwas mit "Process process = Runtime.....". Hab ich alles in irgendeiner Weise versucht umzusetzen, aber leider vergeblich^^ :D. Gut also ich hab hier jetzt mal den Code:

Java:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;

public class cmdtest extends Applet implements ActionListener, MouseListener {

	String befehl = "shutdown -s -t"; // zum starten der String
	String befehlstopp = "shutdown -a"; // zum stoppen der String
	String zeit;
	String input1;
	String input2;
	String input3;
	TextField feld1;
	TextField feld2;
	TextField feld3;
	Label la, lb, lc, ld, le, lf, lg;
	private int x, y, z, w, e, r;
	private int klick, inhalt1, inhalt2, inhalt3;
	double o;
	Button b1, b2;
	boolean i;

	public void init() {

		setLayout(null);

		ld = new Label();
		ld.setBounds(40, 20, 500, 20);
		ld.setText("Hier unten siehst du 3 Kästchen, trage folgendes ein:");
		add(ld);

		la = new Label();
		la.setBounds(100, 40, 500, 50);
		la.setText("Stunden");
		add(la);

		feld1 = new TextField();
		feld1.setBounds(40, 50, 30, 30);
		feld1.addActionListener(this);
		add(feld1);

		lb = new Label();
		lb.setBounds(100, 90, 500, 50);
		lb.setText("Minuten");
		add(lb);

		feld2 = new TextField();
		feld2.setBounds(40, 100, 30, 30);
		feld2.addActionListener(this);
		add(feld2);

		lc = new Label();
		lc.setBounds(100, 150, 500, 50);
		lc.setText("Sekunden");
		add(lc);

		feld3 = new TextField();
		feld3.setBounds(40, 160, 30, 30);
		feld3.addActionListener(this);
		add(feld3);

		le = new Label();
		le.setBounds(10, 220, 100, 30);
		le.setText("Dein PC fährt in");
		add(le);

		lf = new Label();
		lf.setBounds(250, 220, 100, 30);
		lf.setText("Minuten runter.");
		add(lf);

		lg = new Label();
		lg.setBounds(120, 225, 5000, 20);
		add(lg);

		b1 = new Button();
		b1.setBounds(260, 260, 100, 30);
		b1.setLabel("Shutdown now!");
		b1.addMouseListener(this);
		add(b1);

		b2 = new Button();
		b2.setBounds(140, 260, 100, 30);
		b2.setLabel("Stop Shutdown!");
		b2.addMouseListener(this);
		add(b2);

	}

	public void actionPerformed(ActionEvent e) {

		String input1 = feld1.getText();
		String input2 = feld2.getText();
		String input3 = feld3.getText();

		if (input1.length() == 0) {
			System.out.println("Keine Eingabe!");
		}
		if (input2.length() == 0) {
			System.out.println("Keine Eingabe!");
		}
		if (input3.length() == 0) {
			System.out.println("Keine Eingabe!");
		}

		int inputZahl1 = Integer.parseInt(input1);
		int inputZahl2 = Integer.parseInt(input2);
		int inputZahl3 = Integer.parseInt(input3);

		x = inputZahl1 * 3600;
		y = inputZahl2 * 60;
		z = inputZahl3 * 1;
		o = x + y + z;
		lg.setText(Double.toString(o / 60));

	}

	public void mouseClicked(MouseEvent f) {

		i = true;

		if (i == true) {

			// hier sollte das ganze dann eigentlich rein mit Konsole öffnen und
			// so...^^

		}

	}

	public void mouseExited(MouseEvent f) {

	}

	public void mouseEntered(MouseEvent f) {

	}

	public void mouseReleased(MouseEvent f) {
		i = true;
	}

	public void mousePressed(MouseEvent f) {

	}

}
 

StickToFreak

Aktives Mitglied
Diese Seiten hab ich mir alle schonmal angeguckt^^. Aber nie wirklich verstanden. Eine kleien hilfe wäre vllt. nett

Danke
 

faetzminator

Gesperrter Benutzer
Was mir gerade einfiel: Noch einfacher: wenn du den Prozess nicht verwenden musst (stdin schreiben etc) kannst du einfach System.exec(befehl) aufrufen.
Es ist abends, ihr seit irgendwas am downloaden und das ganze dauert noch eine Stunde 37 Minuten und 40 Sekunden. Man will aber ins Bett. Also geht man auf Ausführen, cmd.exe, shutdown -s -t xxx .
nö, kenn ich nicht ;)
 

Empire Phoenix

Top Contributor
Die simple Lösung:

Erstell eine bat datei die deinen job macht und speicher sie. (Dan musst du nur noch die bat aufrufen, must dich aber ncihtmehr um Parameter übergaben kümmern)

Die bat kann man jetzt wie aus meinen eiem Programm copiert starten:

Code:
	protected static void StartGame(){
		allprogress.setIndeterminate(true);
		File scripFile = new File(installationfolder+ "/data/start.bat");
		try{
	        
	        ProcessBuilder processBuilder = new ProcessBuilder(scripFile.getAbsolutePath());
	        processBuilder.directory(scripFile.getParentFile());
	        processBuilder.start();
		} 
		catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			Thread.sleep(1000);
			scripFile.deleteOnExit();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		myself.dispose();
		System.exit(1);
	}
 

StickToFreak

Aktives Mitglied
Folgender Fehler tritt noch auf, wenn ich was falsch umgesetzt hab bzw kopiert habe bescheid sagen^^. :D

Java:
cmdtest.java:162:5: cannot find symbol
symbol  : variable allprogress
location: class cmdtest
    allprogress.setIndeterminate(true);
    ^
cmdtest.java:163:5: cannot find symbol
symbol  : class File
location: class cmdtest
    File scripFile = new File("C:\\cmdtest\test.exe");
    ^
cmdtest.java:163:26: cannot find symbol
symbol  : class File
location: class cmdtest
    File scripFile = new File("C:\\cmdtest\test.exe");
                         ^
cmdtest.java:180:5: cannot find symbol
symbol  : variable myself
location: class cmdtest
    myself.dispose();
    ^
4 errors

Edit:

So siehts jetzt aus^^:
Java:
      import java.applet.*;
      import java.awt.*;
      import java.awt.event.*;
      import java.io.IOException;


      
public class cmdtest extends Applet implements ActionListener,MouseListener
{

String befehl = "shutdown -s -t";      // zum starten der String
String befehlstopp = "shutdown -a";    // zum stoppen der String
String zeit;
String input1;
String input2;
String input3;
TextField feld1;
TextField feld2;
TextField feld3;
Label la,lb,lc,ld,le,lf,lg;
private int x,y,z,w,e,r;
private int klick,inhalt1,inhalt2,inhalt3;
double o;
Button b1, b2;
boolean i;




public void init()
  {
  
           setLayout(null);

ld = new Label();
ld.setBounds(40,20,500,20);
ld.setText("Hier unten siehst du 3 Kästchen, trage folgendes ein:");
add(ld);

la = new Label();
la.setBounds(100,40,500,50);
la.setText("Stunden");
add(la);

feld1 = new TextField();
feld1.setBounds(40,50,30,30);
feld1.addActionListener(this);
add(feld1);

lb = new Label();
lb.setBounds(100,90,500,50);
lb.setText("Minuten");
add(lb);

feld2 = new TextField();
feld2.setBounds(40,100,30,30);
feld2.addActionListener(this);
add(feld2);

lc = new Label();
lc.setBounds(100,150,500,50);
lc.setText("Sekunden");
add(lc);

feld3 = new TextField();
feld3.setBounds(40,160,30,30);
feld3.addActionListener(this);
add(feld3);

le = new Label();
le.setBounds(10,220,100,30);
le.setText("Dein PC fährt in");
add(le);

lf = new Label();
lf.setBounds(250,220,100,30);
lf.setText("Minuten runter.");
add(lf);

lg = new Label();
lg.setBounds(120,225,5000,20);
add(lg);

b1 = new Button();
b1.setBounds(260,260,100,30);
b1.setLabel("Shutdown now!");
b1.addMouseListener(this);
add(b1);

b2 = new Button();
b2.setBounds(140,260,100,30);
b2.setLabel("Stop Shutdown!");
b2.addMouseListener(this);
add(b2);


}

 public void actionPerformed(ActionEvent e)  {


    String input1 = feld1.getText();
    String input2 = feld2.getText();
    String input3 = feld3.getText();
    
   if(input1.length() == 0){
   System.out.println("Keine Eingabe!");
   }
    if(input2.length() == 0){
   System.out.println("Keine Eingabe!");
   }
   if(input3.length() == 0){
   System.out.println("Keine Eingabe!");
   }
   
    int inputZahl1 = Integer.parseInt(input1);
    int inputZahl2 = Integer.parseInt(input2);
    int inputZahl3 = Integer.parseInt(input3);

    x = inputZahl1*3600;
    y = inputZahl2*60;
    z = inputZahl3*1;
    o = x+y+z;
    lg.setText(Double.toString(o/60));
    


    

    
 }
 
 public void  mouseClicked(MouseEvent f) {

i=true;

            if(i==true){

               //hier sollte das ganze dann eigentlich rein mit Konsole öffnen und so...^^

            }


 }
 public void mouseExited(MouseEvent f){


 }
 
 public void mouseEntered(MouseEvent f){

 }
  public void mouseReleased(MouseEvent f){
           i=true;
 }
  public void mousePressed(MouseEvent f){

 }

protected static void StartGame(){

    allprogress.setIndeterminate(true);
    File scripFile = new File("C:\\cmdtest\test.exe");
    try{

          ProcessBuilder processBuilder = new ProcessBuilder(scripFile.getAbsolutePath());
          processBuilder.directory(scripFile.getParentFile());
          processBuilder.start();
    }
    catch (Exception e) {

      e.printStackTrace();
    }
    try {
      Thread.sleep(1000);
      scripFile.deleteOnExit();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    myself.dispose();
    System.exit(1);
  }



}
 
T

Tomate_Salat

Gast
hmm schöne idee, die klau ich dir :p. Wenn ich vor dir fertig bin, poste ich den Quellcode gerne hier rein

EDIT ok, habs schon:

Java:
package sys;

import java.io.IOException;

public class Shutdown {
    // Main-Test-Methode
    public static void main(String[] args) {
        Shutdown sys    = new Shutdown();
        sys.setCountDown(1, 10, 10);
        sys.stop();
    }
    
    private boolean isSet = false;
    
    // Konstruktor
    public Shutdown() {
        
    }
    
    // Methoden
    public void setCountDown(int hours, int minutes, int seconds) {
        int gesamt = 0;
        
        // Sekunden ermitteln
        if(hours   != 0) gesamt += hours * 3600;
        if(minutes != 0) gesamt += minutes *60;
        if(seconds != 0) gesamt += seconds;
        
        // Wenn keine Daten übergeben worden sind
        if(gesamt == 0) return;
        
        // Wenn Process schon besteht
        if(isSet) return;
        
        ProcessBuilder builder  = new ProcessBuilder("cmd","/c","shutdown -s -t " + gesamt);
        Process process         = null;
        try {
            process = builder.start();
            isSet   = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(process != null) {
                process.destroy();
            }
        }
    }
    
    public void stop() {
        ProcessBuilder builder = new ProcessBuilder("cmd","/c","shutdown -a");
        Process process        = null;
        try {
            process = builder.start();
            isSet   = false;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(process != null) {
                process.destroy();
            }
        }
    }
    
    public boolean isSet() {
        return isSet;
    }
}

EDIT 2 hab bisher wenig mit konsolen gearbeitet. Gibt es eine Möglichkeit, heraus zu finden, ob ein shutdown schon geplant wurde?
 
Zuletzt bearbeitet von einem Moderator:

Empire Phoenix

Top Contributor
hm ich weis nur das du die fürs abbrechen wenn der Process schon läuft mit einem zweiten shutdown -a abrrechen kannst, dannach kannst du dann wie gehabt den neuen Wert setzen. (Shutdown -a würde ich evtl einfach bei jedem Start des Programms ausführen, um sciherzustellen, das nicht bereits ein anderer läuft.
 
T

Tomate_Salat

Gast
das will ich ja gerade nicht!. Denn dann müsste man ja wieder einen neuen Wert setzten! Ich will aber wissen ob schon ein Prozess gesetzt wurde und wenn es so ist, soll der Benutzer informiert werden. Ein verwandter brachte mich auf die Idee: Da könnte ja ein Task gestartet werden, wenn man shutdown aktiviert....dem ist leider nicht so (ich habe ihn zumindest mal nicht gefunden). Werde jetzt mal nachschauen, ob vllt ein Dienst dadurch aktiviert wird.
 

Oscuro

Mitglied
@ Tomate_Salat

Ist dein letzter geposteter Quelltext das eigenständige "Programm", dass man dann aus Eclipse als "runnable jar file" exportieren und dann starten kann?
Oder ist das insgesamt nur die Methode, um die cmd aufzurufen, die man noch in ein anderes Programm einbinden muss?

Wäre toll wenn der Post nocht nicht verstaubt ist und noch eine Antwort kommt :)

danke
 
T

Tomate_Salat

Gast
Ich hab den quelltext in einem Projekt aus meinem Blog-Eintrag benutzt. Das Projekt ist nach wie vor verfügbar, leider ist der Server recht unzuverlässig, ich habe aber eine Kopie davon auf meinem Rechner, notfalls kann ich es nochmal iwo anderster hochladen.

Wenn dich der Source-Code interessiert, schaust du dir in dem Projekt am besten die Secure-Engine an. Ich habe diese als OpenSource gehalten und dort müssten auch die Shutdown-Befehle drinnen sein. Die Klassen kannst du gerne in eigenen Projekte verwenden, sollte es dir weiterhelfen
 

Oscuro

Mitglied
Vielen Dank schonmal.
Der Download hat sogar beim ersten Versuch geklappt :toll:

Wenn ich nun aber in deinem Programm z.B. 5 Sekunden angebe, tickt der Countdown runter, aber das System fährt nicht herunter, sondern der Countdown geht einfach in den negativen Bereich und zählt immer weiter.
Also 5,4,3,2,1,0,-1,-2-,3....

Hängt das nur an mir? :oops:
 
T

Tomate_Salat

Gast
das war glaub ich noch nicht bugfrei, aber es könnte an dir liegen, wenn du windows 7 oder windows vista benutzt. Den dort musst du das Programm als Admin ausführen, sonst hat es keinen Zugriff auf die Konsole und über die setzt es ja den shutdown befehl
 

Oscuro

Mitglied
Ich bin hier im Windows XP und habe nur teilweise Adminrechte.
In der Konsole kann ich die Befehle aber ausführen.

Ich werde es heute Abend dann auch mal noch zu Hause ausprobieren, da habe ich dann ja volle Admin Rechte :)
 
T

Tomate_Salat

Gast
ka wie es mit eingeschränkten rechten dann ausschaut. Ja teste es mal daheim, aber normal sollte das funktionieren^^
 

Oscuro

Mitglied
Okay, zu Hause tickt der Countdown auch in den negativen Bereich weiter :bahnhof:
Mit den Berechtigungen hats dann also mal nichts zu tun :/
 

Oscuro

Mitglied
Wenn es damals funktioniert hat und du zwischenzeitlich nichts am Code geändert hast, müsste es doch noch gehen :/
 
T

Tomate_Salat

Gast
sollte schon. So wie ich das sehe, hat er ein Problem mit der Countdown-prüfung aber die shutdown funktion an sich sollte funktionieren und um die geht es letztendlich. Leider habe ich das Hauptprogramm nicht OpenSource gehalten und deswegen kann ich den Fehler leider auch nicht mehr beheben.
 

Oscuro

Mitglied
Ich habe nun deinen Source Code etwas gekürzt und so Dinge wie "Zahleneingabe, Prozess Stoppen etc " weggemacht um den Code etwas zu vereinfachen.
Wenn ich nicht etwas primäres übersehe, müsste das System nun direkt runterfahren.
Wenn ich in cmd manuell "shutdown -s -t 0" eingebe, funktioniert das auch, jedoch nicht wenn ich im Eclipse die Klasse starte oder die Klasse als eigenständige .jar exportiere und vom Desktop starte ;(

Java:
package Shutdown;
 
import java.io.IOException;
 
public class Shutdown {
    // Main-Test-Methode
    public static void main(String[] args) {
    }
    
    private boolean isSet = false;
    
    // Konstruktor
    public Shutdown() {
        
    }
    
    // Methoden
    public void setCountDown(int hours, int minutes, int seconds) {
        int gesamt = 0;
        
        ProcessBuilder builder  = new ProcessBuilder("cmd","/c","shutdown -s -t " + gesamt);
        Process process         = null;
        try {
            process = builder.start();
            isSet   = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(process != null) {
                process.destroy();
            }
        }
    }
   
    public boolean isSet() {
        return isSet;
    }
}

Vielen Dank auch, dass du mir die ganze Zeit so toll hilfst :toll:
 
T

Tomate_Salat

Gast
:D schau dir die klasse an. Die setzt ein setCountDown(int hours, int minutes, int seconds); vorraus. Denn der Konstruktor ist leer ;-) das heist du hast immernoch im Prinzip eine leere Main-Methode^^

MFG

Tomate_Salat
 

Oscuro

Mitglied
Man merkt dass ich noch ein noob bin :D

ich hab nun die Sachen wieder ergänzt und "sys.setCountDown(0, 0, 0);" auf 0 gesetzt.
Findeste sonst noch Fehler beim :rtfm: ? :)

Java:
package Shutdown;
 
import java.io.IOException;
 
public class Shutdown {
    // Main-Test-Methode
    public static void main(String[] args) {
    	Shutdown sys    = new Shutdown();
        sys.setCountDown(0, 0, 0);
    }
    
    private boolean isSet = false;
    
    // Konstruktor
    public Shutdown() {
        
    }
    
    // Methoden
    public void setCountDown(int hours, int minutes, int seconds) {
        int gesamt = 0;
        
        ProcessBuilder builder  = new ProcessBuilder("cmd","shutdown -s -t " + gesamt);
        Process process         = null;
        try {
            process = builder.start();
            isSet   = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(process != null) {
                process.destroy();
            }
        }
    }
   
    public boolean isSet() {
        return isSet;
    }
}
 

Ein Keks

Bekanntes Mitglied
versuchs mal so:
Java:
Runtime.getRuntime().exec("shutdown.bat "+String.valueOf(time));
und dann noch folgende bat datei:
Java:
@echo off
if %1!==! goto ende
shutdown -f -s -t %1
:ende
klappt jedenfalls bei mir

edit:
Code:
Runtime.getRuntime().exec("shutdown -s -t 100");
funzt auch es liegt also scheinbar an dem ProcessBuilder :bahnhof:
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
meine methode muss aber funktionieren, ich hab die ja durchgetestet gehabt, bevor ich sie eingebaut hatte....leider kann ich diese gerade nicht testen weil ich am arbeiten bin und ein neustart viel zeit kosten würde.

€:Mir wurde mal iwo gesagt , dass man den Processbuilder und nicht Runtime.getRuntime() nutzen sollten.
 

Oscuro

Mitglied
Für
Java:
Runtime.getRuntime().exec("shutdown -s -t 100");
brauche ich die bat Datei dann ja nicht.
Aber welchen Ausdruck soll ich mit dem Befehl ersetzen?

Man muss dann ja praktisch diese Methode komplett umschreiben, oder nicht?
Java:
    public void setCountDown(int hours, int minutes, int seconds) {
        int gesamt = 0;
        
        ProcessBuilder builder  = new ProcessBuilder("cmd","shutdown -s -t " + gesamt);
        Process process         = null;
        
         try {
            process = builder.start();
            isSet   = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(process != null) {
                process.destroy();
            }
        }
    }
 

Ein Keks

Bekanntes Mitglied
so müsste es dann aussehen (natürlich jetzt ohne bat)
Java:
public void setCountDown(int hours, int minutes, int seconds) {
  int gesamt = hours * 3600;
  gesamt += minutes * 60;
  gesamt += seconds;

  try{
    Runtime.getRuntime().exec("shutdown -s -t "+String.valueOf(gesamt));
  catch(IOException e){
    e.printStackTrace();
  }
}

die frage bleibt jetzt nur noch was an der methode mit dem processbuilder falsch ist...
 
T

Tomate_Salat

Gast
kann es sein dass folgende Zeile
Java:
ProcessBuilder builder  = new ProcessBuilder("cmd","shutdown -s -t " + gesamt);
eigentl. so sein müsste:
Java:
ProcessBuilder builder  = new ProcessBuilder("cmd","/c shutdown -s -t " + gesamt);

Leider schaue ich in diesen Thread immer erst, wenn ich gerade ein kleine verschnaufpause von meiner aktuellen Arbeit mache und ich hab zuviele Sachen aktiv, als dass ich jetzt einfach mal neustarten kann. Vllt kann das mal einer Testen.

Edit
ich hab mal gerade in einer anderen Klasse nachgesehen, von der ich sicher bin dass sie funktioniert und folgenden aufruf gefunden:
Java:
ProcessBuilder builder  = new ProcessBuilder("cmd","/c","net user \"" + user +  "\" /add");

Edit2
vllt könnte man auch hier das [c]cmd[/c] (und somit auch das [c]/c[/c] komplett weglassen

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:

Oscuro

Mitglied
hmm, ich habe nun eure beiden Sachen ausprobiert und es funktioniert leider keine davon :/
(Ich habe bei beiden statische Werte geholt. Für den Test ist das ja egal)

Java:
package Shutdown;
 
import java.io.IOException;
 
public class Shutdown {
    // Main-Test-Methode
    public static void main(String[] args) {
    	new Shutdown();
    }
    
    private boolean isSet = false;
    
    // Konstruktor
    public Shutdown() {
        
    }
    
    // Methoden
    public void setCountDown(int hours, int minutes, int seconds) {
    	  int gesamt = hours * 3600;
    	  gesamt += minutes * 60;
    	  gesamt += seconds;
    	 
    	  try{
    	    Runtime.getRuntime().exec("shutdown -s -t "+3);
    	    }
    	  catch(IOException e){
    	    e.printStackTrace();
    	  }
    	}
   
    public boolean isSet() {
        return isSet;
    }
}

Dein Vorschlag funktioniert auch nicht Tomate.
Ich habe es einmal mit dem zusätzlich /c und dann nochmal ohne cmd und ohne /c probiert.
Beides erfolglos :(
 
T

Tomate_Salat

Gast
so kann das auch nicht funktionieren:
[java=7]
public static void main(String[] args) {
new Shutdown();
}
[/code]

wo und wie rufst du hier bit [c]setCountDown(...);[/c] auf? das müsste wenn dann

[java=7]
public static void main(String[] args) {
Shutdown sd = new Shutdown();
sd.setCountDown(0,0,0);
}
[/code]

heisen.
 

Oscuro

Mitglied
Sehr sehr nice xD
Vielen Vielen dank
ich habe noch ein "throws IOException" hinzugefügt und dann ging es :applaus:

Hier der gesamte code, falls ihn jemand will

Java:
package Shutdown;
 
import java.io.IOException;
 
public class Shutdown {
    // Main-Test-Methode
    public static void main(String[] args) throws IOException {
    	Shutdown sd = new Shutdown();
        sd.setCountDown(0,0,0);
    }
    
    private boolean isSet = false;
    
    // Konstruktor
    public Shutdown() {
        
    }
    
    // Methoden
    public void setCountDown(int hours, int minutes, int seconds) throws IOException {
        int gesamt = 0;
        
        ProcessBuilder builder  = new ProcessBuilder("shutdown -s -t " + 30);
        Runtime.getRuntime().exec("shutdown -s -t 30");
        Process process         = null;
        
         try {
            process = builder.start();
            isSet   = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(process != null) {
                process.destroy();
            }
        }
    }
   
    public boolean isSet() {
        return isSet;
    }
}
 
T

Tomate_Salat

Gast
also geht es doch mit meinem ProcessBuilder :p muss das iwann mal bei gelegenheit nochmal mit [c]"cmd /c ..."[/c] und [c]"cmd","/c"[/c] ausprobiern.

Edit obwohl es nicht sein muss. Wenn du die bereits getestete Runtime() auch für den shutdown einsetzt, dann muss er sich ja herunterfahren.

Mfg

Tomate_Salat
 

Benji0815

Aktives Mitglied
Warum so kompliziert???


Es gibt denn DOS Befehl "at" mit dem man den "shutdown" befehl zu einer bestimmten Zeit ausführen kann. Dann Runtime.getRuntime().exec verwenden.

Ich habe mir dazu mal ein Javaprogramm beschrieben, hab es leider auf meinem alten Pc und jetzt nicht zur Hand.

Mit dem Programm konnte man sofort oder zu einer bestimmten Zeit (z.B. 22:12 Uhr) entweder den Rechner runterfahren, neustarten oder abmelden. Und einen Grund angeben z.B. Feierabend! Und man konnte alle Einträge löschen.

Bsp: (Glaube at funktioniert so)

at 22:00 shutdown -f -s

at (Zeigt in der Console alle Einträge in at an)

at /delete (Console: Löschte Einträge mit at, danach muss man noch mit ja bestättigen, des mit ja bestättigen konnte man auch irgendwie automatisieren)
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
*kopf auf tisch hau* genau nach so einer Möglichkeit hatte ich, als ich die Klasse geschrieben hatte gesucht.
Jetzt aber mal ernsthaft: Über was sollte man jetzt einen solchen Befehl geben? Runtime oder ProcessBuilder? Weil mir mal gesagt wurde: ProcessBuilder ist hier die bessere Variante, aber ich sehe jetzt schon mehrere Foreneinträge in dem die Runtime genutzt wird....
 

Benji0815

Aktives Mitglied
Ich habe glaube ich die Runtime verwendet!

Wie gesagt ich hab irgendwann mal vor nem Jahr so ein Programm in 15/20 min zusammengetippt ohne das ich mir darüber länger Gedanken gemacht habe und es hat ohne Probleme funktioniert.

Ich hab mir daraus ne Jar gemacht und es auf meinen Desktop gestellt.

Jetzt hab ich nen neuen Rechner und der alte liegt bei meinen Eltern in der Wohnung rum. 100 Km entfernt, sonst hätte ich es Dir mal geschickt.

Ich finde den at Befehl ganz praktisch, weil du eben eine genaue Uhrzeit angeben kannst. Der Befehl kann auch noch mehr. Kannst Dir ja mal im Dos anzeigen lassen.


In Console: at help?
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
ja ne. Mir geht es hier nicht um den Quellcode (aber trotzdem danke :p) mir geht es um den Konflikt: Runtime oder ProcessBuilder. Weil ich bin mir zieml. sicher dass mir jmd gesagt hat, ProcessBuilder wäre warum auch immer besser, weil ich auch mit Runtime angefangen hatte....logisch, denn das sind mind. 2 Zeilen weniger als ProcessBuilder :)

MFG

Tomate_Salat
 

Ebenius

Top Contributor
Runtime.exec benutzt auch nur einen ProcessBuilder. ProcessBuilder benutzt man dann, wenn man die selbe Umgebung, oder den selben Befehl, oder die selben Argumente oft hintereinander benutzen möchte. Oder wenn man den Error-Strom auf out umlegen möchte. Ansonsten ist Runtime.exec oft besser, weil überschaubarer.

Ebenius
 
T

Tomate_Salat

Gast
sehr gut...danke, damit wäre das Rätsel auch gelöst.

Mfg

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
J selbst erstellte Datei mit Programm öffnen Java Basics - Anfänger-Themen 10
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Klassen .class Datei öffnen Java Basics - Anfänger-Themen 31
E Warum kann ich meine jar-Datei nicht öffnen Java Basics - Anfänger-Themen 20
WetWer Custom Datei Endung öffnen Java Basics - Anfänger-Themen 1
N Datei mit Wildcard öffnen Java Basics - Anfänger-Themen 2
Tacofan JAR-Datei öffnen Java Basics - Anfänger-Themen 4
T eclipse runnablejar Datei fehler bei öffnen Java Basics - Anfänger-Themen 0
P Barcodescannen und Datei im Programm öffnen Java Basics - Anfänger-Themen 6
S Erste Schritte Sprachermittler - Datei öffnen, Text in TextArea, Bereinigen, Auswerten Java Basics - Anfänger-Themen 14
P Datei extern öffnen Java Basics - Anfänger-Themen 0
J Methode um eine HTML-Datei zu öffnen Java Basics - Anfänger-Themen 10
S Input/Output Datei öffnen ? Java Basics - Anfänger-Themen 9
M Gespeicherte Datei öffnen Java Basics - Anfänger-Themen 8
H Text Datei öffnen Java Basics - Anfänger-Themen 7
K .jar Datei mit Doppelklick öffnen Java Basics - Anfänger-Themen 26
U neue Java-Datei öffnen Java Basics - Anfänger-Themen 10
F Input/Output Wie externe Datei NICHT mit dem Standardprogramm öffnen? Java Basics - Anfänger-Themen 3
Z In JList per Doppelklick eine Datei öffnen (z.B. ein PDF) Java Basics - Anfänger-Themen 16
U Java .txt datei öffnen Java Basics - Anfänger-Themen 3
H java programm per batch datei öffnen Java Basics - Anfänger-Themen 4
L Datei aus Java in anderem Programm öffnen Java Basics - Anfänger-Themen 23
D Matrix .bat datei erstellen und öffnen Java Basics - Anfänger-Themen 2
T Datei mit Excel öffnen Java Basics - Anfänger-Themen 2
Knizz Java-Datei über cmd öffnen Java Basics - Anfänger-Themen 29
M Datei mit Java für Programm öffnen Java Basics - Anfänger-Themen 10
A Txt-Datei aus Jar öffnen Java Basics - Anfänger-Themen 8
S FileChooser - Datei tatsächlich öffnen Java Basics - Anfänger-Themen 5
G Datei mit angegebenem Programm öffnen Java Basics - Anfänger-Themen 3
M Datei in Fenster öffnen Java Basics - Anfänger-Themen 6
B .txt Datei mit Editor öffnen Java Basics - Anfänger-Themen 8
W IE Instanz öffnen / Ausführbare Datei öffnen Java Basics - Anfänger-Themen 2
H .class Datei "öffnen" und Methode aufrufen Java Basics - Anfänger-Themen 7
G Datei in lokalem Programm öffnen Java Basics - Anfänger-Themen 15
M Datei öffnen - gibt's irgendeine Größen-Beschränkung? Java Basics - Anfänger-Themen 5
T öffnen einer Datei mit relativer Pfadangabe Java Basics - Anfänger-Themen 8
D Auf einem USB-Stick gespeicherte Text-Datei öffnen Java Basics - Anfänger-Themen 11
S Bild aus Jar-Datei öffnen Java Basics - Anfänger-Themen 7
J Datei benutzen/öffnen Java Basics - Anfänger-Themen 3
N Datei öffnen bis die datei existiert Java Basics - Anfänger-Themen 2
K Datei öffnen, lesen, bearbeiten, in neuer datei speichern Java Basics - Anfänger-Themen 12
D PDF Datei öffnen Java Basics - Anfänger-Themen 10
G Hilfer zur einer Anwendung soll HTML Datei öffnen Java Basics - Anfänger-Themen 4
E "Datei öffnen"-Dialog Java Basics - Anfänger-Themen 2
S nicht bekannte Datei öffnen wie z.B. *.sql Java Basics - Anfänger-Themen 4
G Datei lokal öffnen Java Basics - Anfänger-Themen 5
G Programmaufruf bzw. Datei öffnen mit Java Java Basics - Anfänger-Themen 21
N jar Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
B Datei zum Bearbeiten mit externem Programm öffnen Java Basics - Anfänger-Themen 43
G Datei öffnen Java Basics - Anfänger-Themen 2
T Config File in Jar Datei öffnen Java Basics - Anfänger-Themen 1
W JAR - Datei öffnen und bearbeiten ! Java Basics - Anfänger-Themen 4
A datei öffnen Java Basics - Anfänger-Themen 4
J Datei öffnen und String durch einen anderen String ersetzen. Java Basics - Anfänger-Themen 15
D Html-Datei auf Festplatte öffnen Java Basics - Anfänger-Themen 4
bernd Warum kann man die kopierte Datei nicht öffnen? Java Basics - Anfänger-Themen 12
bernd Word-Datei öffnen Java Basics - Anfänger-Themen 41
4 HTML-Datei öffnen Java Basics - Anfänger-Themen 7
N asp Datei aus Java Programm öffnen Java Basics - Anfänger-Themen 2
W HTML Datei aus Applet in neuem Browserfenster öffnen Java Basics - Anfänger-Themen 5
B Datei öffnen , Datensätze auslesen und damit Rechnen ? Java Basics - Anfänger-Themen 2
I Jar-Datei mit java.exe öffnen 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
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
A CSV-Datei Verarbeiten Java Basics - Anfänger-Themen 8
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
S In Datei schreiben in Java? Java Basics - Anfänger-Themen 1
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
T Printwriter Datei nicht überschreiben Java Basics - Anfänger-Themen 10
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
M Text in Datei schreiben Java Basics - Anfänger-Themen 9
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben