Do Javy 6.0 zostało dołączone API ( JSR 223) umożliwiające wywoływanie różnych języków wewnątrz wirtualnej maszyny. Można w ten sposób przesunąć chociażby moment kompilowania kodu na później bądź od razu podpiąć język interpretowany.
Poniżej przykład: [sourcecode lang=“java”] package org.code_house.scripting;
import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager;
public class JSMain {
public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager();
System.out.println(“Dostępne języki”); for (ScriptEngineFactory engine : manager.getEngineFactories()) { System.out.println(engine.getNames()); }
ScriptEngine engine = manager.getEngineByName(“js”); engine.put(“y”, 12);
if (engine != null) { engine.eval(“var x = 1; print(x + y);”); } }
} [/sourcecode]
W taki oto sposób na naszej konsoli powinno wylądować coś takiego: [sourcecode lang=“java”] [js, rhino, JavaScript, javascript, ECMAScript, ecmascript] 13 [/sourcecode]
Możemy również uruchomić plik js. Wystarczy do metody eval przekazać FileReader. Po uruchomieniu kodu który jest niżej powinno pokazać się okienko podobne do tego, które widzicie przy tym akapicie.
[sourcecode lang=“java”]package org.code_house.scripting;
import java.io.*; import javax.script.*;
public class JavaScriptMain { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName(“js”); engine.eval(new FileReader(new File(“print.js”))); } }[/sourcecode] [sourcecode lang=“js”] frame = new javax.swing.JFrame; frame.defaultCloseOperation = javax.swing.JFrame.EXIT_ON_CLOSE; frame.title = “Test” frame.setSize(new java.awt.Dimension(180, 80));
button = new javax.swing.JButton(“Kliknij mnie”) button.addActionListener(function(event) { print(event.source); }); frame.add(button);
frame.show() [/sourcecode]
Z dodatkowych języków można podpiąć między innymi PHP, Java FX, Groovy, BeanShell i wiele innych. Aby to zrobić należy ściągnąć ze strony scripting.dev.java.net rozszerzenia (dostępne w sekcji Documents & files) i dodać JAR dla języka którego potrzebujemy do classpath.