2011-09-20 7 views
38

Quería crear un pequeño producto en el que quisiera dar un tipo de característica en la que el usuario pueda escribir un tipo de lenguaje de script en javascript.¿Cómo puedo usar Javascript en Java?

Y también de javascript capaz de construir objetos y métodos de llamadas sobre ellos.

¿Hay algún marco para esto?

+0

@Felix: tan fresco como lo es, Node.js no tiene nada que ver con Java o navegadores web, ¿verdad? – maerics

+0

@maerics Correcto, pero puede proporcionar una consola para jugar. Y puede ejecutar scripts. Y el OP no mencionó nada sobre los navegadores web :) – Felix

+1

@Felix Entonces la idea de una "consola de JavaScript que cada navegador tiene no es relevante, y node.js no es Java, entonces ... no parece muy útil. –

Respuesta

33

Rhino es lo que estás buscando.

Rhino es una implementación de código abierto de JavaScript escrito completamente en Java . Normalmente está integrado en las aplicaciones Java para proporcionar scripting a los usuarios finales.

Actualización: Ahora Nashorn, que es más performante motor JavaScript para Java, está disponible con jdk8.

+0

utilizando rinoceronte ¿Puedo ejecutar la mayoría de las construcciones de guiones básicos junto con los objetos Java ... –

+1

Sí se puede ver aquí: http://www.mozilla.org/rhino/ ScriptingJava.html – kunal

15

Java incluye un scripting language extension package partir de la versión 6.

Véase el Rhino project documentation for embedding a JavaScript interpreter in Java.

[Editar]

Aquí es un pequeño ejemplo de cómo se puede exponer a objetos Java a su script interpretado:

public class JS { 
    public static void main(String args[]) throws Exception { 
    ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript"); 
    Bindings bindings = js.getBindings(ScriptContext.ENGINE_SCOPE); 
    bindings.put("stdout", System.out); 
    js.eval("stdout.println(Math.cos(Math.PI));"); 
    // Prints "-1.0" to the standard output stream. 
    } 
} 
+2

+1 Consulte también este pequeño [Ejemplo de ScriptEngine] (http://stackoverflow.com/questions/7441625/how-to-find-a-button-source-in-awt-calculator-homework/7441804#7441804). –

10

Puede utilizar ScriptEngine, ejemplo:

 

public class Main { 
    public static void main(String[] args) { 
     StringBuffer javascript = null; 
     ScriptEngine runtime = null; 

     try { 
      runtime = new ScriptEngineManager().getEngineByName("javascript"); 
      javascript = new StringBuffer(); 

      javascript.append("1 + 1"); 

      double result = (Double) runtime.eval(javascript.toString()); 

      System.out.println("Result: " + result); 
     } catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 
} 
 
+0

déjame probar esto ... ahora ..... –

+0

esto es como tener una evaluación de javascript y obtener un resultado en java. ¿Qué pasa si quiero usar objetos java directamente en javascript? ..... –

+0

Lea la documentación: el enlace a Rhino provisto en otra respuesta lo discute en los primeros párrafos. –

4

El motor de JavaScript de Rhino que se incluyó en JDK 6 está siendo reemplazado por un nuevo motor llamado Nashorn para JDK 8.

El Oracle blog for Nashorn contiene noticias y muestras del código fuente.

6

Oracle Nashorn proporciona interoperabilidad entre los mundos Java y JavaScript. Eso significa que su código Java puede invocar código JavaScript, y viceversa. Basic tutorial para entender cómo escribir un programa usando Oracle Nashorn.

0

Solo quería responder algo nuevo a esta pregunta: J2V8.

Autor Ian Bull dice "Rhino y Nashorn dos tiempos de ejecución comunes de JavaScript, pero éstos no cumplió con nuestras necesidades en un número de áreas:.

Ni de apoyo 'primitivos' todas las interacciones con estas plataformas requerir clases de envoltura tales como entero, doble o booleano. Nashorn no es compatible con Android. Las optimizaciones del compilador de Rhino no son compatibles con Android. Ninguno de los motores admite la depuración remota en Android.""

Highly Efficient Java & JavaScript Integration

Github link

Cuestiones relacionadas