# externes Programm in Java einbinden



## javaguru (28. Nov 2005)

Hallo zusammen,

ich bin Javaanfänger. Habe nun ein Problem. Ich soll für ein Programm eine grafische Oberfläche entwerfen. 
Eigentlich alles ganz lustig, funktioniert soweit auch, nur ist jetzt die Einbindung der Software dran. Es handelt sich hierbei um Artistc Style, ein Codeformatierungsprogramm für Java, C usw.....
Ich habe halt paar JCheckBoxen hingezaubert, die sollen die jeweiligen funktionien in astyle übernehmen, und dann halt noch nen JButton formatieren wo astyle ausführt.


Über eine Antwort würde ich mich sehr freuen.


Nen freundlichen Grüß

javaguru


----------



## lin (28. Nov 2005)

in was für ner Sprache ist astyle geschrieben?


----------



## javaguru (28. Nov 2005)

hallo,

astyle ist mit C geschrieben worden.


----------



## L-ectron-X (28. Nov 2005)

Dann such doch mal im Forum nach _Runtime.getRuntime().exec(...)_.


----------



## Guest (28. Nov 2005)

hi,

dankeschön für die Antwort.

habe auch hier etwas gefunden

http://www.boku.ac.at/javaeinf/jein3.html


----------



## javaguru (30. Nov 2005)

hallo,

astyle kann ich öffnen, allerrdings muss ich des über cmd machen. ich muss mich im Ordner der zuformatierenden Datei befinden und dann mit folgender Syntax formatieren


z.B. 

D:\JavaFiles\ asytle -paramter test.java

Die Parameter möchte ich mit Checkboxen übergeben, den Ordner mit nem FILE einfach, und die Datei noch.

praktisch  Process p = Runtime.getRuntime().exec ("cmd File Checkboxen Dateiname");

naja funktioniert erstaunlicherweise *gg* nicht. 

hat für mich jemand die lösung


----------



## The_S (30. Nov 2005)

dazu gabs letztens erst was, auch du darfst die Suche verwenden  :wink: 

Runtime.getRuntime().exec("cmd c\ Lauferk:\\Pfad\\ZurDatei\\Datei.endung Parameter");

ggf. brauchste noch Anführungszeichen.

[edit] \\ statt \ sry ...


----------



## Mag1c (30. Nov 2005)

Mensch H_I_B  ???:L 

*\\* und nicht *\*  

und Anführungszeichen würden nicht helfen, da Runtime#exec den String per StringTokenizer auseinander nimmt.

Gruß
Mag1c


----------



## The_S (30. Nov 2005)

Mag1c hat gesagt.:
			
		

> Mensch H_I_B  ???:L
> 
> *\\* und nicht *\*
> 
> ...



Ach verdammt, die Eile ...  :x 

Doch in manchen Fällen benötigt man Anführungszeichen. Musste ich feststellen als ich ne Suche geschrieben hab bei dem man dateien/ordner/programme per Doppelklick öffnen kann.


----------



## javaguru (5. Dez 2005)

hallo, habe noch ein Problem.

mein astyle lässt sich nur korrekt ausführen, wenn ich mit meiner konsole in dem Ordner der zu formatierenden Datei bin, also nicht standard C:\Dokumente und Einstellungen\user

sondern z.B. C:\JavaFiles\Projekte\Hallo\....

Gibt es nun eine Möglichkeit in Java, wenn man die konsole öffnet, den Pfad mitzugeben, so das die Konsole in dem Pfad der zu formatieren Datei ist?????????????


----------



## L-ectron-X (5. Dez 2005)

Am besten mit einer Batchdatei.


----------



## javaguru (5. Dez 2005)

ok, nun folgendes:

Pfadangabe:

ich kann in meinem runtime.getRuntime().exec("cmd .... ") keine JCheckBoxen und File miteinbinden. String wird übernommen. Wie kann ich nun in String umwandeln. ich hätte mal parsen gedacht. Funktioniert aber nicht.
hat jemand ne Idee?


----------



## The_S (5. Dez 2005)

javaguru hat gesagt.:
			
		

> ok, nun folgendes:
> 
> Pfadangabe:
> 
> ...



Äh, hä? Was is? Das Value von ner Checkbox bekommst du mit isSelected und das File bekommste als String mit toString.


----------



## javaguru (5. Dez 2005)

hallo,

des mit toString funktioniert nicht, kriege zwar keinen Fehler aber ist immer noch ein File.

brauche  nen String für cdm dateipfad also hab ich mir mal geklaut z.B.

String cmdBefehl = "start cd c:\\xmlimport\\ && xmlbatch test.xml";

ich brauche stat der c:\\xmimport nen String, der mir den Pfad gibt;

praktisch das cmd in dem String anfängt.

wie schaffe ich das?



ok hat sich erledigt. 

hat funktioniert

für interessierte

String Pfad = "C:\\Windows";
String feuer = "Start cd " + Pfad;
Process p = Runtime.getRuntime().exec("cmd /c" + Feuer);


----------



## javaguru (6. Dez 2005)

sorry, hat sich doch nicht erledigt.

Das mit der Usereingabe funktioniert jetzt, sprich, User klickt auf Datei öffnen, Dateipfad wird gespeichert. Problem ist allerdings, dass der Pfad nur ein / enthält, z.B. C:\Programme\..... und nicht \\.

Wie kann ich das ändern?


----------



## The_S (6. Dez 2005)

Wenn der Dateipafd ein / enthält passt das auch. Du meinst vermutlich nur ein \. Und das mag ich zu bezweifeln, lass ihn dir mal auf der Konsole ausgeben. Steht da dann C:\Programme\dingsbums dann passt der String


----------



## javaguru (6. Dez 2005)

wenn ich schreibe 


String Pfad = "C:\\Windows";

String Feuer = "start cd" + Pfad;

und dann runtime funtkioniert es

wenn ich jetzt aber statt Pfad mein File hinhänge, öffnet sich die Konsole mit "Der Verzeichnisname ist ungültig".


----------



## The_S (6. Dez 2005)

Und was hat das jetzt damit zu tun dass \ statt \\ geschrieben wird?

mach ma ein

System.out.println(file.toString());

und poste was ausgegeben wird.


----------



## javaguru (6. Dez 2005)

ok, mein System.out.println funktioniert kommt mein Dateipfad raus also D:\\AblageOffline\JavaFiles\Projekte\...

Problem ist eben nur cmd. Da kommt eben die Fehlermeldung "Der Verzeichnisname ist ungültig". 
Wenn ich D:\\AblageOffline\\... angebe, funktioniert der Wechsel bei cmd.


----------



## The_S (6. Dez 2005)

Sicher dass bei deiner Ausgabe nach dem D: auch wirklich zwei \ folgen? Dürfte eigentlich net sein. Probier den Befehl so wie er dir Ausgegeben wird mal ohne Java einfach nur auf der Konsole aus und schau obs klappt.


----------



## javaguru (6. Dez 2005)

hab den Befehl rein auf meiner konsole probiert.

mit \\ geht es und mit \ auch.

des mit \\ muss dann auf Java geschrieben sein. Egal, aber ich muss irgendwie die \\ hinkriegen. Splitten hätte ich mal gedacht, aber müsste ich ja auch händisch machen. dann hätte ich mal dumm gedacht mit ner bedingung z.B. wenn irgendwo ein \ ist, dann \\ machen, irgendwie so


----------



## The_S (6. Dez 2005)

Ich glaub du hast da was grundsätzliches net verstanden!?

Da steht überall \\

Ein \ ist ein Character der escaped werden muss. Und das Escapezeichen is nunmal \ deswegen \\. Nen Zeilenumbruch musst du ja z. B: auch escapen \n. Steht jetzt in deinem String/File tatsächlich nur D:\Programme, dann würde er versuchen das P zu escapen, da \P. Geht aber net, weil P kein Escapecharacter ist und es würde zu einem Fehler kommen.

Du kannst ja gerne mal deinen String C:\\Programme\\dingsda\\ ausgeben. Da steht dann auch nur C:\Programme\dingsda


----------



## javaguru (6. Dez 2005)

ja schon klar, kenne ich, hilft mir aber trotzdem net weiter. Sorry aber wie kann ich mein File überall wenn \ ist \\ einsetzen???


----------



## The_S (6. Dez 2005)

warum willst du das? is doch schwachsinn!

Aber gut:

str = file.toString().replaceAll("\\", "\\\\");


----------



## javaguru (6. Dez 2005)

was heißt hier wollen, ich muss zwecks astyle.

wenn ich cdm starte, möchte ich net in meinem homeverzeichnis sein, sondern ich muss in dem verzeichnis sein, wo die zu formatierende datei liegt.

also z.B. D:\\ablageoffline\JavaFiles\Projekte dann astyle -parameter dateiname


----------



## The_S (6. Dez 2005)

Und wofür brauchst du dann \\ statt \? Für den Pfad net. Such mal, gab letztens schonmal nen Aufruf eines progrs über exec mit Parametern.


----------



## javaguru (6. Dez 2005)

ich kann nur in der konsole mit \\ den pfad wechseln, also wenn ich in java sage das er wechseln soll.

aber jezt mal zu deinem

str = file.toString().replaceAll("\\", "\\\");

funktioniert bei mir nicht, "\\", funtkioniert aber dann "\\\" geht nicht, nach dem \\\" meint er das mir ein " fehlt, stimmt aber nicht.


----------



## The_S (6. Dez 2005)

Wenn in der Konsole


```
cd C:\Programme
```

net geht fress ich nen besen :wink: !

Das kommt daher, weil ich auch \\\\ geschrieben hab und net \\\ :bae:


----------



## Mag1c (6. Dez 2005)

Hi javaguru,

wenn in dem File, was mit dem FileChooser ausgewählt wird, nur einfache "\" drin stehen, dann ist das völlig korrekt. Du mußt dort nicht die "\" durch "\\" ersetzen. Wenn du irgendwo im Quelltext eine Pfadangabe hast, dann mußt du genau dort statt einfachen "\" doppelte "\\" benutzen. Beim kompilieren macht dan der Compiler aus den "\\" wieder einfache "\".

Ich hoffe, ich hab dich jetzt nicht noch mehr verwirrt: ganz kurz: die doppelten "\\" sind nur für den Compiler.

Gruß
Mag1c


----------



## javaguru (6. Dez 2005)

ok, ich glaube wir reden ein bisschen aneinander vorbei. also folgendes.

wenn ich cmd öffnen ist man standardmäßig im homeverzeichnis. ist alles ok

wenn ich jetzt auf z.b. auf meinen desktop will normal cd desktop/muell

funktioniert  ja auch wunderbar, alles toll

bei mir soll des jetzt aber so sein, das ich mein astyle über nen einfach button aufrufen, und die datei die ich vorher in meinem Frontend geöffnet habe formatiert. ich brauche cdm da astyle nur über cmd funktioniert. dies soll alles im hintergrund laufen, deswegen muss ich alles übergeben.

so, astyle formatiert die datei, erstellt eine neue datei z.b. vorher.java und vorher.java.orig die orig ist die original und die .java die neu formierte. 

synatx ist folgendes:

cmd

pfad wo die formatierte datei liegt: astyle -paramteter dateiname 

so, ich will jetzt nicht mit cd händisch immer den dateipfad öffnen sondern eben mit dem File aus dem JFileChooser.

um jetzt das verzeichnis in cmd zu ändern schreibe ich in meinem code z.B. String Pfad = "start cd" + Filechooser;

angenommen meine Datei liegt auf D:\JavaFiles

dann muss ich in meinem FileChooser D:\JavaFiles stehen haben, damit aber cmd öffnet mit dem Pfad D:\JavaFiles gleich, muss ich eben \\ angeben. 

wenn ich jetzt nen eigenen String Pfad schreibe, und dann Pfad = "D:\\JavaFiles";
dann öffne ich cmd und ich bin schon in D:\JavaFiles.

jetzt habe ich FileChooser ist bei mir 

sf.toString().replaceAll("\","\\");

eclipse meint jetzt, das "\" ok ist, aber ,"\\" gehören zusammen, also des , mitrein, und dann ist \\ nicht im String, aber ); wieder ???????


----------



## The_S (6. Dez 2005)

ich weiß zwar immernoch net, warum du \\ und net \ brauchst weil das in meinen Augen jeglicher Logik enbehrt aber ok.

Zum mittlerweile 3. mal

sf.toString().replaceAll("\\","\\\\"); 

macht aus \ ein \\


----------



## Mag1c (6. Dez 2005)

Hi,



			
				javaguru hat gesagt.:
			
		

> dann muss ich in meinem FileChooser D:\JavaFiles stehen haben, damit aber cmd öffnet mit dem Pfad D:\JavaFiles gleich, muss ich eben \\ angeben.


Nein, mußt du nicht. Nimm den Pfad so, wie er vom FileChooser geliefert wird.

Gruß
Mag1c


----------



## The_S (6. Dez 2005)

@ Mag1c

genau, sag du auch mal was. Mir glaubt er ja net


----------



## javaguru (6. Dez 2005)

tut mir ja furchtbar leid aber es geht halt net.

ich erhalte die fehlermeldung Der Verzeichnisname ist ungültig wenn ich FileChooser nehme.


----------



## The_S (6. Dez 2005)

Dann haste irgendwas anderes verpfuscht

post mal relevanten Code

+ Verzeichnis wo das zeug liegt

+ Ausgabe bei dir


----------



## Mag1c (6. Dez 2005)

Hier haste mal was zum ausprobieren:


```
public void readAndWait (Process p) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }

    public void test () throws Exception {

        readAndWait(Runtime.getRuntime().exec("cmd /c cd c:\\JavaFiles && dir"));

        File dir = new File("c:\\JavaFiles");
        readAndWait(Runtime.getRuntime().exec("cmd /c cd "+dir.getAbsolutePath()+" && dir"));

        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        if (chooser.showDialog(null, "Open") == JFileChooser.APPROVE_OPTION) {
            File f = chooser.getSelectedFile();
            readAndWait(Runtime.getRuntime().exec("cmd /c cd "+f.getAbsolutePath()+" && dir"));
        }
    }
```

Gruß
Mag1c


----------



## javaguru (6. Dez 2005)

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class EDITOR extends JFrame {
	/**
	* 
	*/
	private static final long serialVersionUID = 1L;
	static int breite = 410, hoehe = 400;
	Container cp; //das ist die Schicht auf dem Frame, auf dem dann die Elemente angeordnet werden.                   //Für Swing erforderlich!
	JButton oeffnen, speichern, btn_formatieren; //die Buttons zum Öffnen und Speichern
	JCheckBox box_format;
	JCheckBox box_format1;
	JTextField tf_oeffnen, tf_speichern; //die dazugehörigen Textfelder
	JTextArea ta; //das Haupttextfeld zum editieren, lesen etc.
	BufferedReader in; //das Objekt, das später die Datei ausliest.
	PrintWriter out; //das Objekt, das die Datei schreibt.
	JFileChooser fc; //das Objekt, das für die Dateidialoge zum Öffnen und Speichern zuständig ist.
	File sf; //in dieser Variable wird der Name der durch den Dateidialog zum öffnen/speichern ausgewählten Datei gespeichert.
	Object knopf; //die Variable wird später im Knopfwächter verwendet und dort erklärt
	

	public EDITOR(){
		super("EDITOR"); //Überschrift und Name(der zB im TaskManager angezeigt wird) des Programmes
		cp = getContentPane(); //Schicht auf der die Elemente angeordnet werden. deswegen z.B. 'cp.setLayout...'
		cp.setLayout(new FlowLayout()); //Die Elemente werden nach dem FlowLayout angeordnet
		cp.add(oeffnen = new JButton("    ÖFFNEN    ")); //Erzeugen
		oeffnen.addActionListener(new knopfwaechter()); //Listener Registrieren
		cp.add(btn_formatieren = new JButton("FORMATIEREN"));
		btn_formatieren.addActionListener(new knopfwaechter());
		cp.add(tf_oeffnen = new JTextField(26));
		cp.add(box_format = new JCheckBox("Hallo"));
		cp.add(box_format1 = new JCheckBox());
		tf_oeffnen.setText("[HIER KLICKEN UM EINE DATEI ZU ÖFFNEN]"); //es wird ein Text in das JTextField geschrieben
		cp.add(speichern = new JButton("SPEICHERN "));
		speichern.addActionListener(new knopfwaechter());
		cp.add(tf_speichern = new JTextField(26));
		tf_speichern.setText("[HIER KLICKEN UM EINE DATEI ZU SPEICHERN]");
		cp.add(new JScrollPane(ta = new JTextArea(18,35))); //die JTextArea wird durch 'new JScrollPane()' mit Scrollbalken versehen.
		fc = new JFileChooser(); //die Dateidialoge zum Öffnen und Speichern werden 'erstellt'
		fc.setCurrentDirectory(new File(".")); //das Ausgangsverzeichnis der Dialoge ist das Verzeichnis in dem das Programm läuft
	}


	class knopfwaechter implements ActionListener {
		public void actionPerformed (ActionEvent e){
			knopf = e.getSource(); //knopf enthällt jetzt den Namen der Klickquelle

			//------


			if(knopf==btn_formatieren)
			{
				try {
	
					String grundbefehl = new String();
				
						String options;
				
					
					String Datei;
				//	String Feuer = new String();
				//	Feuer =  grundbefehl;
		//			Feuer.concat(options);
			//		Feuer.concat(sf);
				
					
					String Pfad = "C:\\Windows";
					
				
					sf.toString().replaceAll("//","///");
					
					System.out.println(sf);
							
					String Feuer = "start cd " + sf;
					Process p = Runtime.getRuntime().exec("cmd /c" + Feuer);
					
					
					try {
						p.waitFor();
					} catch (InterruptedException e1) {
						// TODO Auto-generated catch block
						System.err.println("hallo222" + e1);
					}
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					System.err.println("ichmagnimmer" + e1);
				}

			}




			//____________



			if(knopf==oeffnen){
				String lesen;
				if(fc.showOpenDialog(cp)==0){ //Dialog liefert 0 zurück wenn er nicht abgebrochen wurde.
					ta.setText("");
					sf = fc.getSelectedFile(); //der im Dialog ausgesuchte File wird gespeichert.
					tf_oeffnen.setText(""+sf);
					//da die folgenden Befehle schief gehen können, stehen diese in einem try, catch - Konstrukt.
					try{
						in = new BufferedReader(new FileReader(sf)); //Öffenen
						while((lesen=in.readLine())!=null){
							ta.append(lesen+"\r\n");
						}
						in.close();    //Datei schließen
					}catch(Exception ex1){System.out.println(ex1);} //falls etwas schief gegangen ist, gibt das Programm den Grund über die Konsole aus.
				}
				else{
					JOptionPane.showMessageDialog(cp,"Keine Datei zum Öffnen gewählt!","ÖFFNEN",JOptionPane.ERROR_MESSAGE);
				}
			}

			if(knopf==speichern){
				String schreiben;

				if(fc.showSaveDialog(cp)==0){
					sf = fc.getSelectedFile();
					tf_speichern.setText(""+sf);
					try{
						out = new PrintWriter(new FileWriter(sf)); //Datei zum Schreiben öffnen
						schreiben = ta.getText();
						out.println(schreiben); //Schreiben
						out.flush();          //der Speicher wird gelehrt, damit die Datei völlig zu Ende geschrieben wird.
						out.close();           //Schließen der Datei
					}catch(Exception ex2){System.out.println(ex2);}  //Bei Fehlern werden diese in der Konsole ausgegeben
				}
				else{
					JOptionPane.showMessageDialog(cp,"Keine Datei zum Speichern gewählt!","SPEICHERN",JOptionPane.ERROR_MESSAGE);  // Modales Fenster
				}
			}
		}
	}

	public static void main(String args[]) throws IOException{





		//___________________


		EDITOR f = new EDITOR();
		f.setDefaultCloseOperation(EXIT_ON_CLOSE); // Schließen
		f.setSize(breite,hoehe);
		f.show();
	}

}
```



so habe mal den ganzen code reingehauen

wenn man jetzt compiliert und ausführt,  auf datei öffnen geht, ein file nimmt, und dann auf formatieren klickt, öffnet sich cmd mit Der Verzeichnisname ist ungültig

wenn ich jetzt statt

String Feuer = "start cd " + sf;
Process p = Runtime.getRuntime().exec("cmd /c" + Feuer);

String Feuer = "start cd " + Pfad;
Process p = Runtime.getRuntime().exec("cmd /c" + Feuer);

nehme, öffnet sich cmd mit ausgangspfad C:\Windows


bitte um Hilfe

_L-ectron-X hat die Codetags eingefügt._


----------



## Mag1c (6. Dez 2005)

Ahh,

du wählst Dateien aus. Sag das doch. Dann also:


```
String Feuer = " start cd " + sf.getParent();
```

und mach das *sf.toString().replaceAll("//","///");* raus. Das bewirkt, so wie es da steht, sowieso nix 

Gruß
Mag1c


----------



## HAOSK (6. Dez 2005)

Hi javaguru,

hab gerade alle beiträge gelesen, und ehrlich gesagt ich glaube du machst dass es extra ;-)

vergleiche doch einfach mal:

H_I_B:
 sf.toString().replaceAll("\\","\\\\"); 
deine Version:
 sf.toString().replaceAll("//","///");

ps: richtig formatiert lest sich d. Quelltext besser lesen... ;-)


----------



## javaguru (6. Dez 2005)

ne des mit // und \\ hatte ich richtig, hat aber net wirklich funktioniert deswegen habe ich mal umgedreht. Mich wunder hier nix mehr. Auf jeden fall muss ich sagen, es funktioniert nun.

dankeschön


----------



## The_S (6. Dez 2005)

HAOSK hat gesagt.:
			
		

> Hi javaguru,
> 
> hab gerade alle beiträge gelesen, und ehrlich gesagt ich glaube du machst dass es extra ;-)
> 
> ...



Na das glaub ich aber langsam auch :bae: . Ein glück war ich jetzt gerade weg, sonst hätt ich mich auch noch über den unformatierten Code ärgern müssen .

Naja, hauptsache es funktioniert jetzt .

Aber fürs nächste mal, wenn dir zwei Leute (damit meine ich jetzt aber keine zwei Gäste die kA haben ) sagen, dass es daran nicht liegen kann und du noch Anfänger bist, dann glaub denen auch mal.


----------



## javaguru (6. Dez 2005)

der code war eigentlich formatiert, nur falsch reinkopiert mit dem komischen code da. SORRY aber mal ganz dumm reingeschrieben, warum schreib eine Oberfläche für ein Formatierungsprogramm??

egal, ich habe kein problem damit euch zu glauben, wenn es net geht, ist halt bisle schwierg.

aber jetzt könnt ihr euch gleich weiter aufregen, da ich noch ein problem habe.

muss jetzt "astyle" parameter und dateiname eingeben, sprich hätte einfach jetzt mal die die strings miteinander verkettet. Habe eigentlich gedacht mit .concat aber da reagiert mein button nimmer, also öffnet cmd net


----------



## The_S (6. Dez 2005)

Dürfte eigentlich net sein. Wird ne Exception geworfen?

Aber warum nicht einfach

str1 = str1 + str2;

? Generell würde ich aber vor allem bei größeren Strings dazu raten StringBuilder bzw. StringBuffer zu verwenden.


----------



## Mag1c (6. Dez 2005)

Hi,

könntest du mal etwas genauer formulieren, WO du WELCHEN Pfad od. Namen brauchst ? Den Dateinamen aus einem File-Objekt bekommst du mit getName()

Gruß
Mag1c


----------



## Guest (7. Dez 2005)

ok, also folgendes:

ich möchte das wenn ich auf meinen button formatieren gehe, meine ausgewählte Datei z.B: hellworld.txt formatiert wird.
das mache ich wenn ich in meiner konsole folgenden Befehle eingebe:

astyle -t hellworld.java also astyle parameter dateiname

das soll aber automatisiert sein.

also habe ich mal folgendes geschrieben:



```
String astyle = "astyle";
 String parameter = "-t";
 String wechsel = "start cd" + sf.getParent();

      String Feuer = astyle + parameter + wechsel;

            Process p = Runtime.getRuntime().exec("cmd /c" + Feuer);
```


compilieren kann ich, aber wenn ich dann auf meinen button formatieren klicke, passiert nichts. Exception kriege ich auch nicht. Normalerweise müsste ich ja den kompletten Befehl auf meiner Konsole liegen haben.

wie mache ich das?? oder was habe ich falsch gemacht?


----------



## Murray (7. Dez 2005)

Gibnt doch mal den String aus ,den Du an Runtime.exec übergibst. Da scheinen zumindest ein paar Leerzeichen zu fehlen...


----------



## The_S (7. Dez 2005)

Ergänzung zu Murray:



			
				Anonymous hat gesagt.:
			
		

> Normalerweise müsste ich ja den kompletten Befehl auf meiner Konsole liegen haben.?



nein


----------



## Mag1c (7. Dez 2005)

Hi,

die Reihenfolge stimmt nicht:


```
String astyle = "astyle";
 String parameter = "-t";
 String datei = sf.getName();
 String wechsel = "start cd " + sf.getParent();

String Feuer = wechsel + " " + astyle + " " + parameter + " " + datei;

Process p = Runtime.getRuntime().exec("cmd /c " + Feuer);
```

Gruß
Mag1c


----------



## javaguru (8. Dez 2005)

nein, funktioniert nicht, habe jetzt aber a bisle rumprobiert und jetzt folgendes gemacht



```
String cmd = "cmd /c \"";
cmd += "astyle "+" -t "+" <\"" + sf.getName() + "\" > \"" + sf.getName() + ".new\"";

Process p = Runtime.getRuntime().exec(cmd);

Alles wunderbar, nur formatieren tut er nicht. Die Syntax stimmt aber so.

Hat jemand ne Idee was falsch ist??
```


----------



## The_S (8. Dez 2005)

Schonmal versucht ein start vorneweg zu klatschen? Ansonsten guck ma ob du hier was findest

http://www.java-forum.org/de/viewtopic.php?t=24878&highlight=exec+parameter


----------



## javaguru (9. Dez 2005)

ok, dankeschön.

cmd öffnet sich. Problem ist allerdings das nicht formatiert wird.

habe jetzt folgenden code:


```
String cmd = "cmd /c \"";

cmd += "astyle "+" -t  "+" <\"" + sf.getName() + "\" > \"" + sf.getName() + ".new\" > dir.log\"";


Process p = Runtime.getRuntime().exec ("cmd /c start" + cmd),
```


habe über meine konsole den Befehl ausprobiert. Hat funtkioniert. Ich denke jetzt das nicht formatiert wird, weil ich mich nicht im Verzeichnis der Datei befinde. Das Thema hatten wir ja schon. ist mir klar wie das geht. 
Hätte jetzt mal dumm gedacht mache ich einfach so.


```
String cmd = "cmd /c \"";

String pfad = sf.getParent();

cmd += "astyle "+" -t  "+" <\"" + sf.getName() + "\" > \"" + sf.getName() + ".new\" > dir.log\"";


Process p = Runtime.getRuntime().exec ("cmd /c start" + pfad + cmd);
```

kriege jetzt eine Fehlermeldung. "PFAD" konnte nicht gefunden werden..............................blabla

Hat jemand ne Idee, wie ich den Pfad wechseln könnte? Wenn ich noch nen process aufmache, und da pfad reinschmeiße
dann, erhalte ich ja ein neues fenster, des will ich ja nicht


----------



## Mag1c (9. Dez 2005)

Hi,

warum ruderst du zurück ? Das mit dem Verzeichniswechsel ging doch schon. In meinem Code von oben fehlt noch die geeignete Trennung zwischen zwei Befehlen:


```
String astyle = "astyle";
 String parameter = "-t";
 String datei = sf.getName();
 String wechsel = "start cd " + sf.getParent();

String Feuer = wechsel + " && " + astyle + " " + parameter + " " + datei;

Process p = Runtime.getRuntime().exec("cmd /c " + Feuer);
```

Gruß
Mag1c


----------



## javaguru (9. Dez 2005)

dankeschön, funktioniert aber nicht. Immernoch keine Formatierung


----------



## Mag1c (9. Dez 2005)

Hmm,

könntest mal das "start" noch weglassen.

wenn es dann nicht geht, könnte es noch am Pfad liegen, wo "astyle" liegt. Evtl. mal den kompletten Pfad zur ausführbaren Datei angeben.  Und wenn es dann nicht geht, ist irgendetwas anderes faul.

EDIT: ja genau, wo liegt eigentlich das "astyle" ?

Gruß
Mag1c


----------



## The_S (9. Dez 2005)

Du könntest auch in deinen Stirng am Ende ein 

" && pause"

einfügen. So siehst du genau die Ausgabe (natürlich nur wenn das start weiterhin drinsteht).


----------



## javaguru (19. Dez 2005)

Hallo,

mein Programm funktioniert soweit nun. Formatiert auch brav. Allerdings würde ich jetzt gerne die Formatierungs-
optionen mit JCheckboxen an- bzw. abwählbar machen. 
Habe jetzt mal a bisle gegoogelt, aber jeder schreibt was anderes. Was muss ich nun tun.

hab mir dacht das ich ne Verzweigung mache

also ungefähr

 if (e==jb)
   {
          String Pfad = "-j";
   }

funktioniert net wirklich

habe dann mit ner booeleanabfrage gearbeitet geht auch net.

habe jetzt mal folgendes gemacht



```
public void itemStateChanged(ItemEvent b)
   {

          if (box_format.isSelected())  //checkbox = b
             {
                 st.append("-j");
                 st.toString();
             }
   }
```

compilieren kann ich, aber mein st hat halt keinen wert. die abfrage bei if kann doch gar nicht richtig sein oder? habe ich aber von so nem javakurs im netz.

wenn ich mich aber auf mein ItemEvent beziehe, funktioniert des auch net wirklich???!!!


----------



## Mag1c (19. Dez 2005)

Hi,

warum fragst du nicht an der Stelle, wo das Formatieren ausgelöst wird, die einzelnen CheckBoxen ab und baust die Optionen entsprechend dem Zustand der CheckBoxen zusammen ? Bsp:


```
StringBuffer cmd = new StringBuffer();
...
if (chBox1.isSelected()) {
    cmd.append(" -j ");
}
if (chBox2.isSelected()) {
    cmd.append(" -o xxx ");
}
...
Runtime.exec(cmd);
```

Gruß
Mag1c


----------



## Guest (19. Dez 2005)

ok, des funktioniert aber net wirklich, ich bekomme keinen wert.

kann compilieren ausführen alles toll. hab nur keinen wert


----------



## Mag1c (19. Dez 2005)

Äeh,

ja klar ... ohne Code keinen Wert ... völlig logisch 

Gruß
Mag1c


----------

