代码之家  ›  专栏  ›  技术社区  ›  pts

如何调用Java Applet线程中的JavaScript回调?

  •  3
  • pts  · 技术社区  · 14 年前

    我有一些长时间运行的Java代码在Java applet启动的线程中运行。一旦代码完成,它就会为用户提供信息。我想以线程安全的方式将此信息传递给javascript回调。只使用Java DOM API修改HTML文档是不够好的,除非我的JavaScript回调以线程安全的方式被称为副作用(也就是说,最终,在JavaScript回调执行的同一浏览器线程中)。我如何实现这一点?图书馆已经在做了吗?

    3 回复  |  直到 12 年前
        1
  •  2
  •   RzR    13 年前

    看起来您需要的是通用的DOMAPI。本质上,当主UI线程就绪时,您请求一个domservice在主UI线程上给您回电话。

    http://docs.oracle.com/javase/1.5.0/docs/guide/plugin/developer_guide/java_js.html

    正如我所理解的,JSObjt是“老方法”,而普通DOM API是最新的方法(如Java 6)。您需要做的是调用小程序的一个方法,并传递您想要回调的函数对象。然后,小程序从domAction中调用该函数对象。

    我手头没有代码显示给你,这不是我在使用Java之前所做的事情。不过,我也使用了类似于NPAPI Web插件的类似技术,即用JS调用我的C++对象传递一个函数作为参数,然后在以后的阶段,让C++对象调用JS函数。希望这有帮助。

        2
  •  1
  •   Youval Bronicki    14 年前

    我有多个调用javascript的applet线程并发问题。有些呼叫被InternetExplorer8忽略(火狐3.6和Safari5工作正常)。

    我试图用 DOMService.invokeAndWait -那没用。

    我最终确保所有的Java≫JavaScript调用都来自同一个线程,并且我的问题得到了解决(至少暂时地,如果JavaScript线程忙于一些用户启动的工作,我还没有检查会发生什么)。

    为了序列化调用,我使用 Executors.newSingleThreadExecutor

        3
  •  0
  •   pts    14 年前

    似乎没有关于如何做的公共教程。整个JavaScript——Java接口都是未经证实的,并且受到浏览器限制。