PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eval () in Java?



drunken monkey
03.11.2006, 13:19
Hi zusammen?

Habe eine kleine Frage (oder eigentlich zwei), die mich einfach mal allgemein interessieren würde, und da's ja leider keinen Prog-OT-Thread gibt, mach ich halt einen neuen Thread deswegen auf. <_<'

Die Frage:
Gibt es in Java eine Möglichkeit, ähnlich wie in PHP durch eval () Strings als Code interpretieren zu lassen? Eigentlich würde ich ja schätzen, nein, da ja Java im Gegensatz zu PHP kompiliert werden muss, aber da's ja zusätzlich noch interpretiert wird, mehr oder weniger, wär's ja zumindest möglich. Also, Experten: geht's?

Sonst gäb's ja wahrscheinlich immer noch die Möglichkeit, im Code eine "Temp.java"-Datei zu erstellen, Temp-Klasse samt main()-Methode hineinzuschreiben und den String dort einzufügen, dann zu kompilieren und auszuführen, oder? Allerdings weiß ich auch nicht, wie man mit Java Programme (wie eben javac) aufrufen kann, also bräuchte ich auch da Hilfe.
Bzw. bräuchte ich keine, weil ich eigentlich nichts dementsprechendes plane, aber es würde mich halt mal interessieren. ^^''

Jesus_666
03.11.2006, 21:25
Ich denke, was du suchst ist BeanShell (http://www.beanshell.org/). Das ist eine Skriptsprache, die Java so ähnlich ist, daß man Java-Code fast unverändert ausführen kann.

BTW, BeanShell wird in Zukunft ein Teil von Java werden (http://jcp.org/en/jsr/detail?id=274).

DFYX
04.11.2006, 10:42
Theoretisch könnte man da auch was über nen Classloader machen. Damit lässt sich praktisch alles ausführen, wenn man es richtig (Sprich: in den passenden Bytecode) umwandelt.

Jesus_666
04.11.2006, 23:31
Hat nur den Nachteil, daß man vorher den Quell- in Bytecode umwandeln muß, wofür Java keine eingebauten Mechanismen hat - und wenn man versucht, javac zu verwenden hat man plötzlich distributionsspezifische Pfadangaben etc. und setzt auch noch das Vorhandensein eines JDK voraus.

drunken monkey
05.11.2006, 10:55
Hat nur den Nachteil, daß man vorher den Quell- in Bytecode umwandeln muß, wofür Java keine eingebauten Mechanismen hat - und wenn man versucht, javac zu verwenden hat man plötzlich distributionsspezifische Pfadangaben etc. und setzt auch noch das Vorhandensein eines JDK voraus.
JDK habe ich ja, und ich wollte das auch mehr als Spielerei verwenden, wenn überhaupt, und nicht veröffentlichen. Sowas merkwürdiges, un-Java-mäßiges in einem richtigen Programm zu verwenden wäre wohl Blödsinn.
Aber wie kann man jetzt javac aus einem Java-Programm heraus aufrufen? *auf zweite Frage deut*

Aber BeanShell klingt schon mal ziemlich gut, werde ich mir mal näher ansehen. Danke! ^^

Edit: Muchas Gracias! :D

Jesus_666
05.11.2006, 11:08
try
{
Process child = Runtime.getRuntime().exec("ls -la .");
}
catch (IOException e)
{
System.err.println(e.toString()); // bla
}

Für Zugriff auf Rückabewerte etc. sieh' dir die API-Doku zum Thema Process an.
Falls du mehr Kontrolle über den Prozeß brauchst sieh' dir mal die ProcessBuilder-Klasse an.