Exec

Status
Nicht offen für weitere Antworten.
M

michi2

Gast
Ich habe folgende funktion zum kompilieren eines (java) Quellcodes geschrieben.
Leider spackt sie aber noch ein wenig...
Wie kann ich diese Verbessern (fehler beheben, Performence u. anderes)?
Code:
  final class Exec
  {
   String E_ausgabe  = "";
   String E_Befehl  = "";
   Process p2;
   boolean b1 = false;

  class Prozess extends Thread
     {
     public void run()
        {
        try
           {
           p2 = Runtime.getRuntime().exec(E_Befehl );
           }
        catch(java.io.IOException e){}
        }
     }

  class Lesen extends Thread
  {
     public void run()
	{
    try
      {
    Thread.sleep(5000);
       }
    catch (InterruptedException e){}
    p2.destroy();
    BufferedReader in = new BufferedReader(new InputStreamReader(p2.getInputStream()) );	//Ausgaben des Compilers lesen
    String s, s1;
    try
      {
    while((s = in.readLine()) != null )
	{
	E_ausgabe   = E_ausgabe  + (s + "\n");
	}


    BufferedReader in2 = new BufferedReader(new InputStreamReader(p2.getErrorStream()) );	//Fehler des Compilers lesen
    while((s1 = in2.readLine()) != null)
	{
	int i = s1.indexOf("error");
	int l = s1.indexOf("errors");
	if(i == -1 && l == -1)
	  {
	  E_ausgabe   = E_ausgabe  + (s1 + "\n");
	  }
	 else
	  {
	  E_ausgabe   = E_ausgabe  + (s1.substring(0, i));
	  if(l != -1)
	    {
		E_ausgabe   = E_ausgabe  + ("Fehler");
		E_ausgabe   = E_ausgabe  + (s1.substring(i + 6, s1.length()));
	    }
	  else
	    {
		E_ausgabe   = E_ausgabe  + ("Fehler");
		E_ausgabe   = E_ausgabe  + (s1.substring(i + 5, s1.length()));
	    }
	    E_ausgabe   = E_ausgabe  + ("\n");
	  }
	}//Ende 'while'

      }	//Ende 'try'
    catch (java.io.IOException IOEx){System.out.println("Fehler");}
    b1 = true;
        }	//Ende 'run'
     }	//Ende 'Lesen'


  public  void compile(String m_dateiname,String compiler) throws IOException
	{
    if(System.getProperty("os.name").indexOf("Windows") > -1)
	{
	E_ausgabe   = E_ausgabe  + "cmd /c ";
	E_Befehl        = E_Befehl        + "cmd /c ";
	}
    E_ausgabe   = E_ausgabe  + ( compiler + " " + "\"" + m_dateiname+ "\"");
    E_Befehl        = E_Befehl        + ( compiler + " " + "\"" + m_dateiname+ "\"");
    E_ausgabe   = E_ausgabe  + (":\n");
    Prozess pr = new Prozess();
    pr.start();
    Lesen l = new Lesen();
    l.start();
    while(!b1)
       {
          try
             {
             Thread.sleep(500);
	}
          catch (InterruptedException e){}
        }

  }

  public void interpret(String m_dateiname_Name, String m_dateiname_Path,String interpreter) throws IOException
  {
    String t_dateiname_Name = m_dateiname_Name.substring(0,m_dateiname_Name.length() - 5);
    if(System.getProperty("os.name").indexOf("Windows") > -1)
	{
	E_ausgabe   = E_ausgabe  + "cmd /c ";
	E_Befehl        = E_Befehl        + "cmd /c ";
	}
    E_ausgabe   = E_ausgabe  + (interpreter + " -classpath " + "\"" + m_dateiname_Path.substring(0,m_dateiname_Path.length() - 1) + "\"" + " " + t_dateiname_Name );
    E_Befehl        = E_Befehl        + (interpreter + " -classpath " + "\"" + m_dateiname_Path.substring(0,m_dateiname_Path.length() - 1) + "\"" + " " + t_dateiname_Name );
    E_ausgabe   = E_ausgabe  + (":\n");
    Prozess pr = new Prozess();
    pr.start();
    Lesen l = new Lesen();
    l.start();
    while(!b1)
	    {
          try
	    {
             Thread.sleep(500);
	  }
          catch (InterruptedException e){}
	}
  }

     String getString()
      {       
     return E_ausgabe ;
      }
}

Danke!!!
 

The_S

Top Contributor
Hilfreich wäre zu wissen, wo genau die Fehler liegen (also was nicht geht), dann kann man auch leichter helfen, ohne dass man erstmal alles ausprobieren muss ;).
 
M

michi2

Gast
Allso, oft gehts - wenn jedoch der Compiler sehr viele Fehler berichtet beendet er sich aus irgend einem Grund nicht.
Dann macht natürlich auch die Methode nicht weiter.
Darum hab ich das mit den ganzen Threats gemacht um den Prozess nach 5 Sekunden zu beenden. (Zeile 27 u. 30)
Das funktioniert aber nicht!
 

Bleiglanz

Gesperrter Benutzer
völlig hanebüchen

du kannst den Java-Compiler auch direkt aus dem Code heraus aufrufen (ohne den Umweg über exec), dann kriegst du das ganze etwas "plattformunabhängiger" hin
 

KSG9|sebastian

Top Contributor
Code:
package de.test;

import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class CompilerTest {
	File destDir;
	String classPath;
	boolean debug;
	public boolean compile(File[] sources) 
	   { 
	      List args = new ArrayList(); 

	      if(destDir != null) { 
	         args.add("-d"); 
	         args.add(destDir.getPath()); 
	      } 

	      if(classPath != null) { 
	         args.add("-classpath"); 
	         args.add(classPath); 
	      } 

	      if(debug) 
	         args.add("-g"); 

	      //if(deprecation) 
	         args.add("-deprecation"); 

	         if(! System.getProperty("java.vm.version").startsWith("1.3")) { 
	             args.add("-source"); 
	             args.add("1.4"); 
	         } 

	         for(int i = 0; i < sources.length; i++) 
	             args.add(sources[i].getPath()); 

	         int length = args.size(); 
	         String[] params = new String[length]; 
	         args.toArray(params); 

	         Class compiler = null; 
	         Method compileMethod = null; 

	         try { 
	             compiler = Class.forName("com.sun.tools.javac.Main"); 

	             if (compiler == null) 
	                 return false; 

	             Class[] p = new Class[] {String[].class}; 

	             compileMethod = compiler.getMethod("compile", p); 

	         } catch (ClassNotFoundException e) { 
	                 return false; 
	         } catch (NoSuchMethodException e) { 
	             
	             return false; 
	         } 

	 

	         try { 
	             Object objResult = null; 
	             Object[] arguments = new Object[] { params }; 
	             objResult = compileMethod.invoke(compiler.newInstance(), 
	arguments); 

	            return true;
	         } catch (Exception e) { 
	             e.printStackTrace(); 
	             return false; 
	         }
	   }

}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Registry Autostart Eintrag ertstellen mit Java (Runtime.getRuntime().exec()) Allgemeine Java-Themen 0
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
Thallius Runtime.getRuntime().exec " escapen? Allgemeine Java-Themen 9
M exec() funktioniert nicht Allgemeine Java-Themen 1
N Runtime.getRuntime().exec Problem mit find Allgemeine Java-Themen 3
T Bluescreen bei Runtime.exec(); Allgemeine Java-Themen 8
I Runtime.getRuntime().exec Problem Allgemeine Java-Themen 4
R Exec. Jar läd Bilder nicht! Allgemeine Java-Themen 5
G Runtime.exec beendet Programm unter Linux, wenn Java Programm beendet wird Allgemeine Java-Themen 3
N Runtime.exec() Exception Problem Allgemeine Java-Themen 3
N Runtime.exec() Allgemeine Java-Themen 7
S exec( "cmd /c") aber Konsole soll offen bleiben Allgemeine Java-Themen 9
I Encoding Problem bei exec und Windows Allgemeine Java-Themen 2
truesoul Runtime.getRuntime().exec nebenbei ausführen Allgemeine Java-Themen 12
Z Runtime.getRuntime().exec-Problem Allgemeine Java-Themen 4
F Kleines Problem mit exec Allgemeine Java-Themen 14
J Runtime.exec setzt Fokus auf Frame Allgemeine Java-Themen 2
V Probleme mit Runtime.exec() Allgemeine Java-Themen 3
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Runtime.getRuntime().exec(cmd); auf windows ... Allgemeine Java-Themen 2
K getRuntime().exec() untersagen Allgemeine Java-Themen 6
T Runtime.exec() Allgemeine Java-Themen 3
X Wann ist Runtime.getRuntime().exec mit Copy fertig? Allgemeine Java-Themen 10
G Output eines über Runtime.getRuntime.exec gestarteten Jars Allgemeine Java-Themen 6
N runtime.exec() Problem Allgemeine Java-Themen 6
A exec-Problem Allgemeine Java-Themen 11
W Runtime.getRuntime().exec() Allgemeine Java-Themen 10
lordcarlos Runtime exec und mplayer (linux) Allgemeine Java-Themen 11
C JApplet und Runtime.getRuntime().exec() Allgemeine Java-Themen 2
K Runtime.exec mit Timeout Allgemeine Java-Themen 5
K System.exec() Programm mit mehreren Parametern Allgemeine Java-Themen 8
0 Runtime.exec() VLC starten klappt nicht Allgemeine Java-Themen 9
G Runtime.exec - Prozess "mittendrin" "einfach Allgemeine Java-Themen 4
J Runtime.exec unter win vista? Allgemeine Java-Themen 10
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
J Unicode: cmd parameter (main args); exec params; filenames Allgemeine Java-Themen 2
L getRuntime.exec() Problem mit Hochkommata Allgemeine Java-Themen 3
M Probleme Runtime.getRuntime().exec(Start.cmd); Allgemeine Java-Themen 10
F Problem mit Runtime.exec() Allgemeine Java-Themen 8
M Runtime.exec unter Vista (Administrator Rechte) Allgemeine Java-Themen 2
K Probleme mit Runtime.getRuntime().exec Allgemeine Java-Themen 6
A exec()-Methode Allgemeine Java-Themen 7
A Runtime.getRuntime().exec mit Warte auf Beendigung - Wie? Allgemeine Java-Themen 7
N CMD, EXEC, Befehle senden Allgemeine Java-Themen 3
R Problem mit Runtime.getRuntime().exec() Allgemeine Java-Themen 4
the[V]oid Ausführen von "javac" über Runtime.exec() Allgemeine Java-Themen 4
L mit exec() befehl ausführen ( OS X / Linux) Allgemeine Java-Themen 8
H Exec Problem Allgemeine Java-Themen 3
F Runtime.getRuntime().exec mit Linux und Leerzeichen Allgemeine Java-Themen 3
D runtime.exec --> Prozess hängt sich auf Allgemeine Java-Themen 7
T Runtime.exec -> Prozesskontrolle abgeben ? Allgemeine Java-Themen 11
B Probleme mit Runtime.getRuntime().exec("cmd.exe") Allgemeine Java-Themen 4
M Runtime.getRuntime().exec(txt_rsync_option.getText()); Allgemeine Java-Themen 12
M Rückgabewert von Runtime.getRuntime().exec() Allgemeine Java-Themen 2
S Runtime.exec() berechtigungen Allgemeine Java-Themen 5
S Runtime.exec und X Umgebung Allgemeine Java-Themen 2
N mit exec windows runterfahren (mit -c "und grund text&q Allgemeine Java-Themen 3
F Shell-Programme per Runtime.exec() starten und mehr? Allgemeine Java-Themen 4
M Problem mit getRuntime().exec() Allgemeine Java-Themen 9
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
K Runtime.exec und DFÜ-Verbindung Allgemeine Java-Themen 5
P Copy mit Runtime.exec() unter Unix Allgemeine Java-Themen 4
D Problem mit Runtime.getRuntime().exec() Allgemeine Java-Themen 14
L Runtime.getRuntime.exec() Allgemeine Java-Themen 7
S Fehler von .getRuntime().exec(""); Allgemeine Java-Themen 5
T Probleme mit Runtime.exec in Jar File Allgemeine Java-Themen 2
M Runtime.exec unter Linux Allgemeine Java-Themen 11
N Perl Skript ausführen über exec Allgemeine Java-Themen 2
X Problem mit Runtime.getRuntime().exec("cls"); Allgemeine Java-Themen 18
S Runtime.getRunTime().exec("jar cvf .) hängt sich auf Allgemeine Java-Themen 3
M Runtime.getRuntime().exec() - Fehler abfangen Allgemeine Java-Themen 5
S Runtime exec unter MacOS X will nicht "open pfad" Allgemeine Java-Themen 7
G JDK Version - exec Befehl Allgemeine Java-Themen 3
S dvbscan mit Runtime.getInstance().exec() ausführen ? Allgemeine Java-Themen 24
B Problem mit Runtime.getRuntime().exec() Allgemeine Java-Themen 4
G Runtime.getRuntime().exec("cmd /c START") Allgemeine Java-Themen 3
M Runtime.exec() => java.io.exception: too many open files Allgemeine Java-Themen 10
A Pfad mit Leerzeichen über exec starten Allgemeine Java-Themen 6
H gerRuntime().exec stürtz ab? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben