如题

解决方案 »

  1.   

    java 1.6 可以执行动态语言,包括 JavaScript。楼主可以找找相关资料。
      

  2.   

    不太明白,你用java调用js打算怎么用?
    如果是jsp页面include就可以了
      

  3.   

    首先,请装下jdk6的版本。6的刚刚支持。如果你用集成环境,那么请选择你装的jdk6,请不要用工具自带的jdk。ok?
    package com.hy.testScript;import java.io.FileNotFoundException;
    import java.io.FileReader;import javax.script.Compilable;
    import javax.script.CompiledScript;
    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineFactory;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptException;import org.junit.Assert;public class Test { /**
     * @param args
     * @throws ScriptException
     * @throws FileNotFoundException
     * @throws InterruptedException
     * @throws NoSuchMethodException
     */
    public static void main(String[] args) throws ScriptException,
    FileNotFoundException, InterruptedException, NoSuchMethodException {
    // TODO Auto-generated method stub
    // ScriptEngineManager factory = new ScriptEngineManager();
    // for (ScriptEngineFactory available : factory.getEngineFactories()) {
    // System.out.println(available.getEngineName());
    // } ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    engine.eval("print('Hello World!\\n')");
    // /engine.eval("if(true){println ('hello')");
    int i = 0;
    System.out.println("开始循环执行hello.js文件:");
    while (i < 5) {
    // 寻找文件从工程根开始。
    engine.eval(new FileReader("src/com/hy/testScript/hello.js"));
    Thread.sleep(1000);
    i++;
    }
    System.out.println("开始调用类HelloWorld的对象hello的方法:sayHello");
    HelloWorld hello = new HelloWorld();
    engine.put("script_hello", hello);
    engine.eval("script_hello.sayHello()");
    System.out.println("开始调用js脚本方法say:");
    String script = "function say(first,second){ print(first +' '+ second+'\\n'); }";
    engine.eval(script);
    Invocable inv = (Invocable) engine;
    inv.invokeFunction("say", "Hello", "Tony");
    script = "function max(first,second) "
    + "{ return (first > second) ?first:second;}";
    engine.eval(script);
    Object obj = inv.invokeFunction("max", "1", "0");
    Assert.assertEquals("1", obj.toString());
    System.out.println(obj.toString());
    //接口调用,用js实现java接口,呵呵~~~
    script = "function max(first,second) "
    + "{ return (first > second) ?first:second;}";
    script += "function min(first,second) { return (first < second) ?first:second;}";
    engine.eval(script);
    MaxMin maxMin = inv.getInterface(MaxMin.class);
    Assert.assertEquals(1, maxMin.max(1, 0));
    Assert.assertEquals(0, maxMin.min(1, 0));
    //脚本的编译执行
    script = "var email=/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]" 
            + "+(\\.[a-zA-Z0-9_-]+)+$/;";
        script += "var ip = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])"
            +"(\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){3}$/;";
        script += "if(email.test(str)){println('it is an email')}"
                + "else if(ip.test(str)){println('it is an ip address')}"
                + "else{println('I don\\'t know')}";
        engine.put("str", "[email protected]");
        Compilable compilable = (Compilable) engine;
        CompiledScript compiled = compilable.compile(script);
        compiled.eval(); }}
      

  4.   

    package com.hy.testScript;public interface MaxMin {
    public int max(int a, int b);
        public int min(int a, int b);
    }
      

  5.   

    package com.hy.testScript;public class HelloWorld {
    String s = "Hello World!我爱苏小雨~~~";
        public void sayHello(){
            System.out.println(s);
        }
    }
      

  6.   

    发的快说我恶意灌水,晕死我了,我只有重新申请号发了呀。
    你加我qq吧,152850325,有什么不明白的发我邮箱[email protected][email protected]
    你按照我说的做就可以实现java调js了,
    另外,js调java在mozilar的那个主站上有写好的包用的,但配置好烦的~~
    呵呵,你可以试试的。
    java调js可以在公网上使用,而不用担心客户端时候开启了js。其实,即使客户关掉了js,我们也可以强制开启的。
    另外,js调java的部分可以在客户端实现更加强大的功能。
    呵呵~
    不说了,又要封我号了,郁闷死了
      

  7.   

    哦,忘了说了,你最好用myeclipse编译运行,需要载入junit4的包。
      

  8.   

    Rhino: JavaScript for Java
    http://www.mozilla.org/rhino/
      

  9.   

    其实我不太理解,开发用MVC模式的话,为什么要在代码中调用JS?为什么不写成java方法?有什么实际应用的意义?
      

  10.   

    请看一下我上面提供的 Rhino 项目,在首页上开宗明义:Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically embedded into Java applications to provide scripting to end users
      

  11.   

    首先在这里非常感谢各位我其实也不想在java调用js
    maquan 
    问我为什么要问这个问题
    实际上是我们在项目中用到Ext+Dwr+struts2+spring
    而用ext做项目时生成表格GridPanel时会产生
    好几百行的js代码
    因为这些代码有好多重复的
    所以我想把它封装成java类
    而让其它用的人简单的传参数进去就能够得到他想要的了最终目的其实就是让用的人少写点js代码而已
      

  12.   

    这个帖子
    http://topic.csdn.net/u/20080528/16/c177af14-0512-4648-b506-587a4223634e.html
      

  13.   

    那你看看Gwt-ext吧
    是用java生成ext的。
      

  14.   

    请问楼上的sunnysin:
    这是我下面写的一函数
    我想通过dwr来调用的话怎么在页面上返回一个Point 
    还有我返回这样一个对象应该怎么用呢?
    public Object getPonit(){
    Object result = null;
    String obj = "function Point(x,y){this.x = x;this.y = y}";
         String method = "Point.prototype.area = function(){"+
         " return this.x*this.y;}";
        
         String point = "function getPoint(x,y){return new Point(x,y)}";
         try {
    engine.eval(obj+method);
    engine.eval(point);
    } catch (ScriptException e) {
    e.printStackTrace();
    }
         Invocable invo = (Invocable)engine;
        
         try {
     result = invo.invokeFunction("getPoint", new Object[]{new Double(234),new Double(345)});
    } catch (ScriptException e) {
    e.printStackTrace();
    } catch (NoSuchMethodException e) {
    e.printStackTrace();
    }
    return result;
    }在页面上调用className.getPoint(function(data){
       //这里的data不是我想用的
    });thanks......................