Erste Schritte bash-Befehl mit Swing ausführen

dany

Mitglied
Hallo,
Ich hab hier mein erstes kleines Java Programm erstellt,
wäre toll wenn mir jemand helfen könnte es zum laufen zu bringen.

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;

public class HelloWorldSwing extends JFrame implements ActionListener {
    
/* Definiert neuen Schalter*/
	private JButton button;
	private JLabel label;
    
    public HelloWorldSwing(){
        button = new JButton("Stop Apache");
        button.addActionListener(this);
        
        this.getContentPane().add(button);
    }
/*Schalter soll Befehl in der Konsole ausführen und ggf. die Shellausgabe einblenden. */  
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button){
            try {
				Runtime.getRuntime().exec("/bin/bash -c /etc/init.d/apache2 stop");
			} catch (IOException e1) {
				String x=e1.printStackTrace();
				label = new JLabel(x);
			}
        }
    
    
    public static void main(String[] args){
        HelloWorldSwing bec = new HelloWorldSwing();
        bec.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        bec.setSize(200, 200);
        bec.setVisible(true);
    }
}

Ich hoffe dass es soweit selbsterklärend ist, falls ich aber irgenwelche wichtige Info vergessen haben sollte, bitte nicht gleich flamen, wie gesagt mein erstes Java Programm (und es könnten auch gravierende Fehler drin sein), aber wenn es erstmal läuft und ich es verstehe, hätte ich zumindest eine gute Basis um selbst zu experimentieren.

Gruss Dan
 
G

Gast2

Gast
Wenns dein erstes Programm ist dann fang doch bitte nicht direkt mit Swing an ;)
(auch wenn der Code ganz gut ausschaut, bis auf das exceptionhandling mit dem label)

Das Thema mit dem shellaufruf kannst du doch wesentlich besser in ner einfachen konsolenanwendung testen. Da kannst du dir sicher sein dass sonst keine fehler sind.

Zu deinem Problem:
Verwende statt Runtime#exec lieber den ProcessBuilder. Außerdem kannst du dein Kommando nicht in einem String übergeben sondern musst die einzelnen Parameter in nem String[] Array trennen. Das Process Objekt dass du zurückbekommst solltest du dir merken und dessen input- und errorstream mindestens leeren, sonst kanns passieren dass das Programm auf das leeren der Streams wartet.
 

Da_Tebe

Mitglied
Außerdem kannst du dein Kommando nicht in einem String übergeben sondern musst die einzelnen Parameter in nem String[] Array trennen.

Ist mir so noch nie aufgefallen. hab in einem meiner Projekte rumgewühlt und das gefunden:

Java:
Runtime r = Runtime.getRuntime();
Process p = r.exec("./extProg/lzop.exe " + "./" + localpath + " -o " + destpath);

Funktioniert auch ohne String[] Array. Oder hab ich dich falsch verstanden?
 
D

Dow Jones

Gast
...falls ich aber irgenwelche wichtige Info vergessen haben sollte...
Worin unterscheidet sich denn das tatsächliche Verhalten deines Programms von dem gewünschten Verhalten?

Ich habe es nicht ausprobiert, aber generell halte ich es für eine gute Idee im Constructor den Superconstructor aufzurufen. Weiterhin fällt auf, das du in Zeile 27 ständig neue JLabels erzeugst welche du dann nicht nutzt. Sinnvoller wäre es das Label einmalig im Constructor zu initialisieren und zum Frame hinzuzufügen (wie du es ja auch schon beim Button machst), und in Zeile 27 dann lediglich den Text des Labels zu verändern.
 

dany

Mitglied
Gut, stell ich mir etwa so vor, (was natürlich nicht richtig ist)
Java:
            try {
            	public Process exec("/bin/bash -c /etc/init.d/apache2 stop")
                        throws IOException;
			} catch (IOException e) {
				String[] x=e.printStackTrace();
				label = new JLabel(x);
			}
        }
Und ja ich will gleich mit Swing anfangen, denn das Programm soll dazu dienen, um oft benutzte Befehle nicht mehr über die Konsole aufrufen zu müssen.
(ja, vielleicht bin ich etwas ungeduldig :)
 

dany

Mitglied
@ Dow Jones. Wie mach ich das am Besten?

Ach so, Leute ich mag auch gerne grafische Oberflächen,

Und eigentlich will ich mir so das Programmieren erleichtern....
z.B. : ein sudo kate (per Button+dateiauswahl(mit Vorauswahl)) wäre toll, ich kann mir halt nicht immer merken welche Datei in welchem Verzeichnis liegt... (ja da kann man sicher ewig drüber diskutieren...))
 
Zuletzt bearbeitet:
D

Dow Jones

Gast
Das geht ziemlich genau so wie ich es beschrieben hatte. :)

Java:
    public HelloWorldSwing(){
        super();  // aufruf des Constructors von JFrame

        button = new JButton("Stop Apache");
        button.addActionListener(this);
        
        label = new JLabel();
        
        this.getContentPane().add(button);
        this.getContentPane().add(label);
    }

und Zeile 27 müsste man abändern in
Java:
        label.setText(x);
(wobei x ein String sein sollte, und kein Array von Strings. Für mehrzeiligen Text bietet sich statt eines JLabels eher eine JTextArea oder sowas an)
 
Zuletzt bearbeitet von einem Moderator:

dany

Mitglied
Gut, mit
Code:
            Process proc=Runtime.getRuntime().exec("kdesudo kate /etc/apache2/apache2.conf");
hab ich es nun hinbekommen.

Jetzt wollte ich es mit dem Processbuilder probieren,
Ich nun einfach den Code ersetz aber es funktioniert nicht, (auf der Konsole aber erfolgreich getestet)
Ausgabe sagt "Unhandled IOException"

Java:
public class bash extends JFrame
{
	static JLabel lbText = new JLabel("Apache",0);
	static JButton btOK = new JButton("Start");
	static JButton btEdit = new JButton("Edit");
	JPanel plButtons = new JPanel();

	bash()
	{
		super("Start Cebter");
		plButtons.setLayout(new GridLayout(0,8));
		plButtons.add(btOK);
		plButtons.add(btEdit);
		getContentPane().setLayout( new BorderLayout() );
		getContentPane().add("North", lbText );
		getContentPane().add("South", plButtons );
		setSize(10,20);
		pack();
		setVisible(true);
	}
	
	public static void main ( String[] argv) throws IOException, InterruptedException
	{
		new bash();
        //Add action listener to button
        btOK.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent e)
            {
                //Execute when button is pressed
                System.out.println("opening kate");
                

                try
                {
                Process proc=Runtime.getRuntime().exec("kdesudo kate /etc/apache2/apache2.conf");
                BufferedReader read=new BufferedReader(new InputStreamReader(proc.getInputStream()));

                while(read.ready())
                {
                System.out.println(read.readLine());
                }
                }
                catch(IOException ex)
                {
                System.out.println(ex.getMessage());
                }
            }
        });
     
        btEdit.addActionListener(new ActionListener() 
        {
        	 
            public void actionPerformed(ActionEvent ae)
            {
                //Execute when button is pressed
                System.out.println("Apache2 stopped");
                
                String[] command = {"bash", "-c", "ls"};
                ProcessBuilder probuilder = new ProcessBuilder( command );

                //You can set up your work directory
                probuilder.directory(new File("/home/eclipse3.7/workspace/"));
                
                Process process = probuilder.start();
                
                //Read out dir output
                InputStream is = process.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line;
                System.out.printf("Output of running %s is:\n",
                        Arrays.toString(command));
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
                
                //Wait to get exit value
                	try 
                	{
                    int exitValue = process.waitFor();
                    System.out.println("\n\nExit Value is " + exitValue);
                	}
                    catch(IOException ie)
                	{
                		System.out.println(ie.getMessage());
                	}
                	catch (InterruptedException e) 
                	{
                		e.printStackTrace();
                	}
            };
        });
}};

Dabei ist doch eine dabei ,oder hab ich da einen Denk bzw. Logikfehler?

Anm: Ach wo ich gerade dabei bin, wie kann ich mir die Fehlerausgabe per label anzeigen lassen?
Ich dachte statt
Code:
System.out.println(ie.getMessage());
einfach
Code:
lbText.setText(ie.getMessage());
aber geht ja nicht?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Best Practice BASH ähnliche Variablenersetzung Java Basics - Anfänger-Themen 13
P ein Java Script mit Shell/Bash launchen? Ubuntu Java Basics - Anfänger-Themen 3
M Programm bleibt beim Ausführen von Bash-Scripten hängen Java Basics - Anfänger-Themen 5
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
Viktor A. Kaiser Ampelschaltung mit if-Befehl Java Basics - Anfänger-Themen 11
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
Lion.King switch-Befehl Java Basics - Anfänger-Themen 6
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
F Terminal Windows per Befehl schließen? Java Basics - Anfänger-Themen 9
Y Wie kann man überprüfen, ob bei einem Print Befehl tatsächlich etwas geprintet wurde? Java Basics - Anfänger-Themen 4
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
K Subklassen mit einzigem Befehl addieren Java Basics - Anfänger-Themen 6
F cmd Befehl ausführen Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
D Input/Output Befehl aus Benutzereingabe herausfiltern Java Basics - Anfänger-Themen 12
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
N Javac -version der Befehl ist entweder falsch geschrieben oder...... Java Basics - Anfänger-Themen 8
O Methoden Runtime.getRuntime().exec(befehl); Java Basics - Anfänger-Themen 6
L Ist an diesem Befehl irgendwas falsch? Java Basics - Anfänger-Themen 2
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
B Copy Paste Befehl Java Basics - Anfänger-Themen 6
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
D Erste Schritte Zuul - 2ten Befehl einführen Java Basics - Anfänger-Themen 68
D Erste Schritte Befehl back implementieren Java Basics - Anfänger-Themen 18
elischa unbekannter Befehl zur Compilezeit Java Basics - Anfänger-Themen 22
B Befehl um ein Befehl abzubrechen Java Basics - Anfänger-Themen 2
M Classpath Befehl zum Kompilieren um die Option classpath erweitern. Java Basics - Anfänger-Themen 5
F Konsolen Befehl ausführen und Rückgabe auswerten Java Basics - Anfänger-Themen 3
S Befehl current: Java Basics - Anfänger-Themen 3
Silvascus Void Methode einem Stringparameter im syso-Befehl hinzufügen Java Basics - Anfänger-Themen 3
slejden Erste Schritte der Befehl import Java Basics - Anfänger-Themen 2
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
J Problem WIE ohne Goto-Befehl lösbar? Java Basics - Anfänger-Themen 6
N Benötige eine Alternative für einen GOTO Befehl Java Basics - Anfänger-Themen 2
O CMD Befehl javac Java Basics - Anfänger-Themen 3
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
D Klassenmethode: Befehl erkennen, dann int zurückgeben Java Basics - Anfänger-Themen 2
C Desktopiconwechsel ohne Befehl Java Basics - Anfänger-Themen 0
V Schlüsselworte Befehl Ignorieren? Java Basics - Anfänger-Themen 10
B JDK installieren Befehl java funktioniert nicht Java Basics - Anfänger-Themen 15
J Variablen Auf der suche nach einem Befehl Java Basics - Anfänger-Themen 2
M Frage zum return; Befehl Java Basics - Anfänger-Themen 1
C CMD Befehl + Variable im Java-Code ausführen Java Basics - Anfänger-Themen 8
S Methoden auf befehl ausführen Java Basics - Anfänger-Themen 7
iB0T Eine Art Goto Befehl! Java Basics - Anfänger-Themen 27
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
A Schlüsselworte Befehl this Java Basics - Anfänger-Themen 8
E CMD Befehl über Java ausführen? Java Basics - Anfänger-Themen 4
E Warum wird Methode nicht durch return-Befehl beendet? Java Basics - Anfänger-Themen 3
D Hilfe zu Java Befehl In.open Java Basics - Anfänger-Themen 2
B Javadoc-Befehl unter Ubuntu Java Basics - Anfänger-Themen 2
I Befehl/Methode "los()" Java Basics - Anfänger-Themen 17
A Befehl gesucht....wie komme ich an Folgendes Objekt? Java Basics - Anfänger-Themen 6
I Return Befehl in Methode Java Basics - Anfänger-Themen 13
K Befehl per Shell an Java-Applet JAR übergeben Java Basics - Anfänger-Themen 16
S javac Befehl Java Basics - Anfänger-Themen 7
C Befehl zum Verlassen einer Schleife Java Basics - Anfänger-Themen 27
W Befehl ausführen bei Mausklick + gedrückte Strg-Taste Java Basics - Anfänger-Themen 2
B Befehl mit Priorität aufrufen Java Basics - Anfänger-Themen 4
I Befehl wird erst nach dem Ausführen einer Funktion ausgeführt Java Basics - Anfänger-Themen 4
K Problem mit h2 DB Insert Befehl Java Basics - Anfänger-Themen 6
B Befehl für vorselektierten Radiobutton Java Basics - Anfänger-Themen 2
H if-Befehl mit Buttongroup Java Basics - Anfänger-Themen 9
B assert befehl in netbeans Java Basics - Anfänger-Themen 3
M Objekto.Programm. Return-Befehl Java Basics - Anfänger-Themen 4
F Kann String in Befehl wandeln? Java Basics - Anfänger-Themen 12
F Simpler DrawLine - Befehl!? Java Basics - Anfänger-Themen 9
M Befehl zum Einlesen von Benutzereingaben Java Basics - Anfänger-Themen 1
M Befehl zum Fenster schließen? GUI Java Basics - Anfänger-Themen 3
L Do while Befehl verkürzen? Java Basics - Anfänger-Themen 16
-horn- Befehl an CMD übergeben Java Basics - Anfänger-Themen 15
A [Fehlermeldung]Sleep-Befehl Java Basics - Anfänger-Themen 4
B Befehl "javac" wird nicht erkannt Java Basics - Anfänger-Themen 14
S Befehl "javac" funktioniert und Windows 7 nicht? Java Basics - Anfänger-Themen 3
K Terminal Befehl mit Java unter Mac ausführen Java Basics - Anfänger-Themen 18
L Java Persistence API - Update Befehl? Java Basics - Anfänger-Themen 5
X Befehl import Java Basics - Anfänger-Themen 21
Antoras Explizite Typenumwandlung in einem Befehl Java Basics - Anfänger-Themen 3
A Button einen Befehl zuordnen Java Basics - Anfänger-Themen 7
N suche Datums befehl Java Basics - Anfänger-Themen 8
H Problem mit Tastatur Befehl Java Basics - Anfänger-Themen 11
J Kill befehl Java Basics - Anfänger-Themen 44
G java shell script starten und befehl übergeben Java Basics - Anfänger-Themen 3
Z Ant java -classpath befehl Java Basics - Anfänger-Themen 2
X JOptionPane.showMessageDialog(); - Import Befehl? Java Basics - Anfänger-Themen 4
K Befehl um am Anfang einer Methode zu kommen? Java Basics - Anfänger-Themen 9
G Befehl für Ende bei Switch-Auswahl Java Basics - Anfänger-Themen 11
K fehler mit der Befehl Console Java Basics - Anfänger-Themen 3
H Befehl mit Konstruktoren Java Basics - Anfänger-Themen 2
L Leider klappt bei mir ein Befehl nicht Java Basics - Anfänger-Themen 4
P Befehl zum einrücken der textausgabe? Java Basics - Anfänger-Themen 6
A Befehl ausführen beim Schließen der Konsole Java Basics - Anfänger-Themen 3
S Gibt es einen Befehl "Mausklick" o.ä? Java Basics - Anfänger-Themen 6
S Java-Programm ohne -jar Befehl? Java Basics - Anfänger-Themen 9
K Auf File- Befehl warten. Java Basics - Anfänger-Themen 10
T JDK installiert aber der Befehl "javac" funktionie Java Basics - Anfänger-Themen 5
B ItemListener - setText Befehl geht nicht Java Basics - Anfänger-Themen 3
I JNLP - Datenstrom auslesen, Werte berechnen, Befehl automati Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben