G
Gast
Gast
Hallo,
ich habe es nun geschafft, alle notwendigen Bibibliothken in das ausführbare Jar file einzubinden, schon kommt das nächste Problem:
In meinem Programm kann der Anwender eine eigen Java-Datei erstellen, die dann mittels meiner Anwendung ausgeführt werden kann. Beim Ausführen unter Eclipse funktioniert alles wunderbar, aber in dem Jar-File bringt er den Fehler, dass er die temporär erstellte Klasse nicht findet. Wie kann er sie unter Eclipse finden aber im Jar File nicht? Er hat diese Dateien übrigens korrekt erstellt, also sie sind im aktuellen Verzeichnis der Jar-Datei vorhanden. Woher kann dann der Fehler kommen? Im folgenden findet ihr meinen Code:
CompileKlasse
Ausführklasse:
Kann mir jemand helfen.
ich habe es nun geschafft, alle notwendigen Bibibliothken in das ausführbare Jar file einzubinden, schon kommt das nächste Problem:
In meinem Programm kann der Anwender eine eigen Java-Datei erstellen, die dann mittels meiner Anwendung ausgeführt werden kann. Beim Ausführen unter Eclipse funktioniert alles wunderbar, aber in dem Jar-File bringt er den Fehler, dass er die temporär erstellte Klasse nicht findet. Wie kann er sie unter Eclipse finden aber im Jar File nicht? Er hat diese Dateien übrigens korrekt erstellt, also sie sind im aktuellen Verzeichnis der Jar-Datei vorhanden. Woher kann dann der Fehler kommen? Im folgenden findet ihr meinen Code:
CompileKlasse
Code:
public class CompileThread extends Thread
{
File file;
String classname,filename;
public CompileThread(File file2,String classname2,String filename2)
{
file=file2;
filename=filename2;
classname=classname2;
}
public void run()
{
if(this.isInterrupted()==false)
{
//Main Methode compilieren
String[] args =new String[]{"-d",System.getProperty("user.dir"),filename};
int status =Main.compile(args);
switch(status)
{
case 0:
//Temporaere Datei wieder loeschen
new File(file.getParent(),classname + ".class").deleteOnExit();
try
{
Class clazz=Class.forName(classname);
Method main =clazz.getMethod("main",new Class[]{String[].class});
main.invoke(null,new Object[]{new String[0]});
}catch(InvocationTargetException ex)
{
System.out.println("Fehler beim Ausfuehren!");
System.out.println("Exception in main "+ ex.getTargetException());
ex.getTargetException().printStackTrace();
}catch(Exception ex)
{
System.out.println("Fehler beim Ausfuehren!");
System.out.println(ex.toString());
}
break;
case 1: System.out.println("Compile status: ERROR");break;
case 2: System.out.println("Compile status: CMDERR");break;
case 3: System.out.println("Compile status: SYSERR");break;
case 4: System.out.println("Compile status: ABNORMAL");break;
default: System.out.println("Compile status: Unknown exit status");
}
}
}
}
Ausführklasse:
Code:
//fuehrt den Algorithmus aus
//erstellt dafuer Temporaere Java-Datei
//schreibt Variablen und Alg-Eingaben in Datei
//compiliert die temporaere Datei und fuehrt sie aus
synchronized public void ausfuehren(boolean schrittweise)
{
//Algorithmus prüfen
this.pruefeVariablenReihe();
this.pruefeVariablenWerte();
//bevor eigentliches Ausfuehren stattfindet, wird geprueft, ob Variablen Korrekt sind und
//Algorithmus ausgefuellt wurde, sonst erscheint Fehlermessage
if(this.sindVariablenKorrekt()==true && this.pruefeAusgefuellt()==true)
{
try
{
//temporaere Java-Datei erstellen
File file=File.createTempFile("Jav",".java",new File(System.getProperty("user.dir")));
file.deleteOnExit();
String filename=file.getName();
String classname=filename.substring(0,filename.length()-5);
ausgabeDatei = new PrintWriter (new FileOutputStream(file));
//Klassenname in Datei schreiben
ausgabeDatei.println(getSpeicherText(1,classname,schrittweise));
//definierte Variablen ermitteln (String mit Typ,Name,Wert)
if(this.varDef==false)
setDefinierteVariablen();
//Liste dieser Strings mit Variablen Typ,Name,Wert durchlaufen
Iterator i=variablenListe.iterator();
while(i.hasNext())
{
//VariablenStrings in Datei schreiben
Variable var=(Variable)i.next();
String str1=var.getTyp();
String str2=var.getName();
String str3=var.getWert();
String result=str1+" "+str2+"="+str3+"; \r\n";
ausgabeDatei.println(result);
}
ausgabeDatei.println("\r\n");
//Text aus AlgFenster in Datei schreiben
ausgabeDatei.println(this.getText() );
//Alle Variablen durchlaufen
//StandardVariablen Ausgabe in Datei schreiben
ausgabeDatei.println(getSpeicherText(2,classname,schrittweise));
ausgabeDatei.flush();
ausgabeDatei.close();
Thread compile=new CompileThread(file,classname,filename);
compile.start();
try
{
compile.join(this.getWaitSec());
if(compile.isAlive()==true)
{
compile.interrupt();
System.out.println("Ausfuehren wurde nach "+(this.getWaitSec()/1000)+" beendet!");
JOptionPane.showMessageDialog(StructX.getAktivFenster().getHaupFenster(),"Programm wird beendet!!","Endlosschleife",JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}catch(InterruptedException ie){ }
}
catch (IOException e) { System.out.println("Fehler!");}
}
//Algorithmus noch nicht fertig zum Ausfuehren
else
{
JOptionPane.showMessageDialog(StructX.getAktivFenster(),"Bitte Algorithmus pruefen","Fehler",JOptionPane.INFORMATION_MESSAGE);
}
Kann mir jemand helfen.