Javaquellcode während der Laufzeit einbinden

Status
Nicht offen für weitere Antworten.

Peter@Pan

Aktives Mitglied
Kann man irgendwie Java-Quellcode der zum Beispiel in einer TXT-Datei gespeichert wird, während der Laufzeit einlesen und ausführen. Falls "Ja" - gibts es Seiten mit guten Beispielen :?:
 
B

Beni

Gast
Willst du ein Compiler schreiben?

Zumindest *.class-Dateien kannst du mit ClassLoadern einbinden (siehe API und URLClassLoader...).
 

dark_red

Bekanntes Mitglied
afaik kann man den java compilier sogar im quelltext aufrufen (und ich meine nicht so, wie man ein beliebiges externes programm aufruft). ich habe mal gelesen, dass es dafür eine klasse geben soll...
 

foobar

Top Contributor
Kann man irgendwie Java-Quellcode der zum Beispiel in einer TXT-Datei gespeichert wird, während der Laufzeit einlesen und ausführen. Falls "Ja" - gibts es Seiten mit guten Beispielen
Du meinst sowas wie die eval-Funktion in Perl oder JavaScript. Nein, das gibt es in Java leider nicht.
 

Peter@Pan

Aktives Mitglied
Beni hat gesagt.:
Willst du ein Compiler schreiben?

Zumindest *.class-Dateien kannst du mit ClassLoadern einbinden (siehe API und URLClassLoader...).

Nein, das will ich natürlich nicht. Mein Problem ist nur das ich grade an einem Programm schreibe, dass die Prüfziffern von Bankkontonummer ermittelt. Leider gibt es zur Zeit über 100 verschiedene Verfahren und es werden Jahr für Jahr mehr (Mathematiker brauchen ja schließlich auch ne Aufgabe :wink: ). Jedes Verfahren einzeln zu implementieren schloss ich von Anfang an aus und so entschied ich mich, da viele Verfahren sehr ähnlich sind, die typischen Parameter eines Verfahren in einer Datei zu speichern. Das Funktionierte am Anfang auch ganz gut - später merkte ich dass die Idee doch nicht so genial war.... :cry: .Die beste Lösung wäre es nun den Code eines Verfahren extern zu speichern - so wäre es sehr leicht das Programm zu updaten ohne groß den Quellcode des Programms zu ändern.
 

thE_29

Top Contributor
also wennst ne lösung rausfindest (so mit quellcode einbinden) dann sag mir das, würde mich auch interessieren!
 
B

bygones

Gast
dann arbeite über dynamisches Laden....

du erstellst dir ein Interface mit dem das Hauptprogramm arbeitet. Alle Prüfdinger implementieren das Interface. In einer config Datei oder so gibst du an welches verfahren aktuell verwendet wird. Die entsprechende Klasse wird dynamisch geladen und dann im Programm verwendet....
 

Bleiglanz

Gesperrter Benutzer
google nach

BeanShell

die BCEL Library

irgendwo habe ich auch mal ein Beispiel für einen selbst geschriebenen Classloader gesehen, der direkt Java Sources einlesen kann und dann "automatisch" kompliliert
 

Peter@Pan

Aktives Mitglied
Also ich hab das jetzt ganz einfach mit dem URLClassLoader gemacht - alle .class Dateien mit den jeweiligen Prüfverfahren befinden sich in einem Jar.

Code:
File fi = new File("C:\\method.jar");
		URL u = null;
		try {
			u = fi.toURL();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ClassLoader cl = new URLClassLoader(new URL[]{u});
		CheckInterface y = (CheckInterface) cl.loadClass(methodNumber).newInstance();
		System.out.println(y.doIt(accountNumber));

An dieser Stelle hätte ich die Frage werden die geladen Klassen, nachdem Sie benutzt wurden, gelöscht - oder bleiben die im Speicher?

@deathbyaclown: Hast du das so mit den Interfacen gemeint?
 

Peter@Pan

Aktives Mitglied
Naja - da das mit dem Dynamischen-Laden schon ganz gut klappt, hab ich mir gedacht "Schreibst ein kleines Wizard Tool, dass dir die .class Datein erzeugt". Also hab ich mir eine Test-Anwendung geschrieben, in der man in ein JTextArea Quellcode eingeben kann und danach auf einen Button drücken kann. Sobald man auf den Button drückt - soll die TextArea ausgelesen werden und daraus eine .java Datei geschrieben werden. Diese Datei soll dann compeliert werden, nur treten dabei einige Fehler auf.....

Code:
....//Weil ich zu faul war immer wieder den Test-Code einzugeben - hab ich ihn vorher schon definiert.
	JTextArea jtfEingabe = new JTextArea("public class hello { \n"+
		"public static void main(String[] args)\n {System.out.println(\"HEllo\");\n }\n}");
....

public void actionPerformed(ActionEvent event)
	{
//jBuDoIt ist der Button auf dem an drücken kann
		if(event.getSource() == jBuDoIt)
		{
			
		
			
			try
			{
				System.out.println("Schriebe:");
				DataOutputStream out = new DataOutputStream(
										new BufferedOutputStream(
												new FileOutputStream("c:\\javatemp\\hello.java")));

			out.writeBytes(jtfEingabe.getText().replaceAll("\n",""));
			out.close();
			
			}
			catch(Exception e)
			{
				System.out.println("Error: " + e.toString());
			}
			
			File fi = new File("c:\\javatemp\\hello.java");
			if(fi.exists())
			{
				try {
					System.out.println("Compeliere: ");
					Process p = Runtime.getRuntime().exec( "javac "+ "c:\\javatemp\\hello.java");
					try {
						p.waitFor();
					} catch (InterruptedException e2) {
						// TODO Auto-generated catch block
						e2.printStackTrace();
					}
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				
			}
			
		}
		
		
		
	}

Und hier die Fehlerausgabe:


java.io.IOException: CreateProcess: javac c:\javatemp\hello.java error=2
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.<init>(Unknown Source)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at WizDialog.actionPerformed(WizDialog.java:128)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)



Wenn ich auf at java.lang.Win32Process.create(Native Method) klicke (ich benutze Eqlipse) - öffnet
sich ein Class Editor für die Klasse Win32Process.class in der mir gesagt wird, dass die Datei rt.jar
kein "source attachment" hat und ich dieses per klick auf einen Button hinzufügen kann. Allerdings
bin ich mir dabei etwas unsicher, da ich nicht weiß was ich da hinzufüge.

Wird sich das Problem auflösen wenn ich das hinzufüge oder gibt es eine andere Lösung für das Problem bzw.
Ursache?
 

Peter@Pan

Aktives Mitglied
Ich hab jetzt mal die rt.jar über den Class Editor hinzugefügt - leider ohne Ergebnis :cry: bzw. er sagt es wäre nicht die richtige rt.jar - leider hab ich aber keine andere.
 

Peter@Pan

Aktives Mitglied
Also wenn es jemand interessiert: Hab das Problem selbst gelöst - war auch ein ganz dummer :roll: Fehler von mir. Bei
Code:
Process p = Runtime.getRuntime().exec( "javac "+ "c:\\javatemp\\hello.java");

hätte natürlich:

Code:
Process p = Runtime.getRuntime().exec( "c:\\java\\bin\\javac "+ "c:\\javatemp\\hello.java");
stehen müssen....... :oops:
 
B

bygones

Gast
wenn du das programm aber nun auf anderen Rechnern nutzen willst bei denen javac nicht unter c:\java\bin zu finden ist wirds aber dann schwierig....
 

Peter@Pan

Aktives Mitglied
Stimmt, aber deswegen wird es in der finalen Version des Wizards eine Config-GUI geben in der man, unter anderem, den Pfad der javac angeben kann(wird dann in einer Config-File gespeichert) und der Wizard wird prüfen bevor er compeliert, ob die javac am angegeben Pfad ist (wird doch über file.exists() möglich sein?).
 

Sky

Top Contributor
Peter@Pan hat gesagt.:
...der Wizard wird prüfen bevor er compeliert, ob die javac am angegeben Pfad ist (wird doch über file.exists() möglich sein?).

Jein. file.exists kann prüfen, ob eine Datei namens "javac" abgelegt ist. Die Prüfung, ob es sich um den Compiler handelt geht an der Stelle natürlich nicht...!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
DorFey Schrittweises abändern des GUI während for-Schleife / pausieren einer for-Schleife Java Basics - Anfänger-Themen 3
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
CptK Klassen mouseClicked wird nicht aufgerufen, während man die Maus bewegt Java Basics - Anfänger-Themen 4
U Ausgabe von Dateiinhalt während Programmnutzung fehlerhaft Java Basics - Anfänger-Themen 3
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
R Einfaches refresh während runtime Java Basics - Anfänger-Themen 4
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
E Gui updaten während langer Methode Java Basics - Anfänger-Themen 2
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
C Datei speichern während sie geöffnet ist Java Basics - Anfänger-Themen 4
llabusch Interface Layout eines Labels während der Laufzeit ändern Java Basics - Anfänger-Themen 0
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Löschen von Objekten während Iteration über Liste Java Basics - Anfänger-Themen 9
J Ladebalken anzeigen während Bilder geladen werden Java Basics - Anfänger-Themen 2
C repaint wird nicht während Druck auf Maustaste ausgeführt. Java Basics - Anfänger-Themen 4
E Input/Output Inputstream während der Laufzeit füllen Java Basics - Anfänger-Themen 2
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
M Während event einen anderen event ausführen?? Java Basics - Anfänger-Themen 3
C Referenz einer bereits instanziierten Klasse während des Programmablaufs Java Basics - Anfänger-Themen 16
B Klassen Objekte während der Laufzeit dynamisch anlegen Java Basics - Anfänger-Themen 8
Nic.o Panel während Ladevorgang einblenden Java Basics - Anfänger-Themen 12
alderwaran objekthierarchie darstellen während der laufzeit Java Basics - Anfänger-Themen 2
M Timer: period während Verlauf wechseln Java Basics - Anfänger-Themen 12
M args[] während des Programmlaufes eingeben Java Basics - Anfänger-Themen 5
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
B Collection während Iteration verändern Java Basics - Anfänger-Themen 7
B Während Schleife nicht auf Eingabe warten Java Basics - Anfänger-Themen 2
G JProgressBar während dem ausführen einer Funktion Java Basics - Anfänger-Themen 3
A Objekte während der Laufzeit erstellen Java Basics - Anfänger-Themen 3
C Textgröße während des Programmlaufes anpassen Java Basics - Anfänger-Themen 6
S JDialog während automatischer Dateisuche einblenden Java Basics - Anfänger-Themen 6
A Text einer JComboBox während der Laufzeit ändern ? Java Basics - Anfänger-Themen 4
S Boolean während while-schleife verändern? Java Basics - Anfänger-Themen 6
M Java Heap Space während der Laufzeit ändern Java Basics - Anfänger-Themen 2
M Problem beim ändern von Komponenten während Visible(true) Java Basics - Anfänger-Themen 4
G String im TextPane während der Eingabe überprüfen? Java Basics - Anfänger-Themen 12
A Code während des laufenden Programms eingeben Java Basics - Anfänger-Themen 7
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
E Alter (Laufzeit) berechnen Java Basics - Anfänger-Themen 11
W Array zur Laufzeit bearbeiten? Java Basics - Anfänger-Themen 31
D Objekterzeugungen mit zur Laufzeit variierenden Attributen Java Basics - Anfänger-Themen 7
J GroupLayout zur Laufzeit erweitern Java Basics - Anfänger-Themen 1
B Übersetzungszeit und Laufzeit Java Basics - Anfänger-Themen 3
amgadalghabra Die vier Sortieralgorithmen die durchschnittliche Laufzeit in Millisekunden Java Basics - Anfänger-Themen 37
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
H Laufzeit Java Basics - Anfänger-Themen 11
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
L Objekt Typ zur Laufzeit ermitteln Java Basics - Anfänger-Themen 1
J Datei im Package zur Laufzeit editieren Java Basics - Anfänger-Themen 1
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 0
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
D Laufzeit von einfachem Programm Java Basics - Anfänger-Themen 21
J Laufzeit berechnen/Laufzeitanalyse Java Basics - Anfänger-Themen 2
M Input/Output Datei in Laufzeit-JAR kopieren Java Basics - Anfänger-Themen 6
V Laufzeit Java Basics - Anfänger-Themen 23
G Laufzeit/ O/Θ-Notation einer Treeset Methode Java Basics - Anfänger-Themen 0
M Erste Schritte Code zur Laufzeit ändern lassen Java Basics - Anfänger-Themen 3
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
M Methoden miteinander verbinden (Laufzeit) Java Basics - Anfänger-Themen 6
Streeber reale Laufzeit meines Programms ausgeben Java Basics - Anfänger-Themen 1
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
S Klassentyp zur Laufzeit ändern? Java Basics - Anfänger-Themen 3
M Laufzeit und O-Notation Java Basics - Anfänger-Themen 3
M Variablen Variable zur Laufzeit erzeugen Java Basics - Anfänger-Themen 3
A Laufzeit von verschachtelter for-Schleife Java Basics - Anfänger-Themen 4
B Variablen Instanz von Enum zur Laufzeit erstellen und zuweisen Java Basics - Anfänger-Themen 2
L Panels zur Laufzeit ändern Java Basics - Anfänger-Themen 2
A Laufzeit Java Basics - Anfänger-Themen 11
M Methodennamen zur Laufzeit ausgeben Java Basics - Anfänger-Themen 5
F JTable zur laufzeit füllen Java Basics - Anfänger-Themen 7
P GUI - Layout per Laufzeit erstellen/verändern? Java Basics - Anfänger-Themen 6
N Variablen VariableNamen auswirkung auf Laufzeit Java Basics - Anfänger-Themen 3
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
J Erste Schritte Zinseszinsberechnung Ermittlung Laufzeit Java Basics - Anfänger-Themen 3
S Laufzeit bei rekursiver Methode messen Java Basics - Anfänger-Themen 6
S Erste Schritte Weihnachtsbaum / Laufzeit O(n) Java Basics - Anfänger-Themen 9
E Laufzeit verkürzen Java Basics - Anfänger-Themen 14
A Threads Zur Laufzeit hinzufügen/entfernen Java Basics - Anfänger-Themen 10
D Classpath compiler zur Laufzeit aufrufen & lib-classpath Java Basics - Anfänger-Themen 6
B Laufzeit berechnen? Java Basics - Anfänger-Themen 7
S Klasse bei Laufzeit laden? Java Basics - Anfänger-Themen 2
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
D globale Variablen zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
A Frage zur Laufzeit / Optimierung Java Basics - Anfänger-Themen 2
N Laufzeit in Nanosekunden - in Minuten umrechnen Java Basics - Anfänger-Themen 6
G Objekte von Klassen die erst zur Laufzeit bekannt sind erstellen Java Basics - Anfänger-Themen 6
B Frage zur Laufzeit Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben