日期:2014-05-16 浏览次数:20393 次
?
/** * ScriptTest * java调用javascript示例代码 * @author your name * Date: Nov 4, 2011 */ package org.sun.script.js; import java.awt.Component; import java.awt.Container; import java.awt.EventQueue; import java.beans.EventSetDescriptor; import java.beans.IntrospectionException; import java.beans.Introspector; import java.io.FileReader; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Properties; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class ScriptTest { public static void main(final String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { String language; if (args.length == 0) language = "js"; else language = args[0]; ScriptEngineManager manager = new ScriptEngineManager(); System.out.println("Available factories: "); for (ScriptEngineFactory factory : manager.getEngineFactories()) System.out.println(factory.getEngineName()); final ScriptEngine engine = manager.getEngineByName(language); if (engine == null) { System.err.println("No engine for " + language); System.exit(1); } ButtonFrame frame = new ButtonFrame(); try { // File initFile = new File("init." + language); // if (initFile.exists()) // { // System.out.println("exists"); // engine.eval(new FileReader(initFile)); // } getComponentBindings(frame, engine); final Properties events = new Properties(); events.load(new FileReader("bin\\org\\sun\\script\\js\\" + language + ".properties")); for (final Object e : events.keySet()) { String[] s = ((String) e).split("\\."); addListener(s[0], s[1], (String) events.get(e), engine); } } catch (Exception e) { e.printStackTrace(); } frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("ScriptTest"); frame.setVisible(true); } }); } /** * Gathers all named components in a container. * * @param c the component * @param namedComponents */ private static void getComponentBindings(Component c, ScriptEngine engine) { String name = c.getName(); if (name != null) engine.put(name, c); if (c instanceof Container) { for (Component child : ((Container) c).getComponents()) getComponentBindings(child, engine); } } /** * Adds a listener to an object whose listener method executes a script. * * @param beanName the name of the bean to which the listener should be * added * @param eventName the name of the listener type, such as "action" or * "change" * @param scriptCode the script code to be executed * @param engine the engine that executes the code * @param bindings the bindings for the execution */ private static void addListener(Str