Aus einem Java Programm eine .java datei Kompilieren

  • Themenstarter Themenstarter JavaAnfänger81
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

JavaAnfänger81

Gast
Hallo,
vielleicht hab ich nach den falschen Schlagworten gesucht, leider bin ich im netzt nicht fündig geworden zu meinem problem:

Ich möchte eine Java programm schreiben das eine .java datei erstellt und diese dann automatisch kompiliert da sie dann auf methoden dieser neuen java datei zugreifen muss, hier ein bsp. was ich meine:

Bestehendes Programm a:
erzeuge "quell-code"
speicher "Quell-code" als neu.java

kompiliere neu.java // hier ist mein problem, gebt es schon etwas in java das dies kann?

nutze methoden aus neu.java

viellen dank und frohe feiertage an alle 🙂
 
In Java 6 ist die Compiler API integriert. Auf die Methoden der neuen Klasse kannst du mit Reflection zugreifen.
Je nachdem was du genau machen willst, könnte aber dynamic EMF der bessere Ansatz sein.
 
danke für den tipp, leider bin ich ein echter java anfänger nun bekomme ich immer diese fehlermeldung obwohl ich eigentlich es genau so mache wie es in der api steht :
Exception in thread "main" java.lang.NullPointerException
at CompilerDemo.main(CompilerDemo.java:14)
Code:
import java.io.File;
import java.util.Arrays;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class CompilerDemo {
	public static void main(String[] args) throws Exception {

		File files1 = new File("c:/A.java");

		JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
		StandardJavaFileManager fileManager = compiler.getStandardFileManager(
				null, null, null);

		Iterable<? extends JavaFileObject> compilationUnits1 = fileManager
				.getJavaFileObjectsFromFiles(Arrays.asList(files1));
		compiler
				.getTask(null, fileManager, null, null, null, compilationUnits1)
				.call();

		fileManager.close();

	}
}
 
Ein paar (mögliche) Fehlerquellen
Code:
public class CompilerDemo {
   public static void main(String[] args) throws Exception {
Wer fängt die Exception die du throwst? niemand... --> try/catch verwenden


Code:
      File files1 = new File("c:/A.java");

      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
      StandardJavaFileManager fileManager = compiler.getStandardFileManager(
            null, null, null);
Neue Linie --> auf eine Linie nehmen => nur beim kopieren?
Code:
      Iterable<? extends JavaFileObject> compilationUnits1 = fileManager


            .getJavaFileObjectsFromFiles(Arrays.asList(files1));
mit extends hab ich das noch nie gesehen... kann aber sein, dass es das gibt... Ich kenns aber so:

Iterable<Klasse> ...
Code:
      compiler
            .getTask(null, fileManager, null, null, null, compilationUnits1)
            .call();

      fileManager.close();

   }
}

Ich behaupte das mit der neuen Linie müsste es sein, da der Fehler sich auf linie 14 befindet.
 
Vielen Dank für die schnelle hilfe, leider stehe ich immer noch vor dem selben Problem kann es vielleicht an meine Java Veriosn Liedgen (1.6.0_02) oder an meinem betriebssystem Windows Vista, was ist der StandartFileManager eigentlich?

schon bei dieser einfachen anwendung bekomme ich leider nicht all zu viel sagenden fehler :

Exception in thread "main" java.lang.NullPointerException
at CompilerDemo.main(CompilerDemo.java:10)
Code:
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class CompilerDemo {
	public static void main(String[] args)  {

		JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
		StandardJavaFileManager fileManager ;
         fileManager = compiler.getStandardFileManager(null, null, null);

	}
}

ich bin für jeden tipp sehr dankbar.
 
Hab den fehler selber gefunden für alle die es interesseiren sollte hatte jre statt jdk benutzt
 
Das bedeutet das irgendeins von deinen Objecten NULL ist. Also pruefe mal genau deinen Code. Ob mit dem Debugger oder mit System.out.println und gebe die einzelnen Objecte aus. Dann siehst du schnell welches Object "leer" ist.
Zb unter
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
machst du dann
System.out.println("compiler: " + compiler);
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben