我有一些运行在由Java小程序启动的线程中的长时间运行的Java代码。代码一旦完成,它就会为用户提供信息。我想以线程安全的方式将此信息传递给JavaScript回调。只是使用Java DOM API来修改HTML文档不够好,除非我的JavaScript回调以线程安全方式(即最终在执行JavaScript回调的同一浏览器线程中)作为副作用被调用。我怎样才能实现这个?有没有图书馆已经在做它?如何从Java applet线程调用JavaScript回调?
回答
似乎没有公开教程如何做到这一点。整个JavaScript - Java接口没有记录,并且受到浏览器限制。
看起来好像Common DOM API是你所需要的。实质上,你可以请求一个DOMService在主UI线程中回调,并且它已经准备就绪。
http://docs.oracle.com/javase/1.5.0/docs/guide/plugin/developer_guide/java_js.html
据我了解的东西,JSObject是 “老办法” 和公共DOM API是较新的方式(如Java 6)。你需要做的是调用你的小程序的方法,并传递你想要回调的函数对象。然后你的applet从你的DOMAction中调用该函数对象。
我没有任何代码可以向您展示,这不是我在使用Java之前完成的。不过,我使用了一种类似的技术,使用用C++编写的NPAPI Web插件,即JS调用我的C++对象传递一个函数作为参数,然后在稍后阶段让C++对象调用JS函数。 '希望这有助于。
当然可以,但我该怎么写我在我的'DOMAccessor.run'?我应该尝试获取对'JSObject'的引用,并尝试从那里调用回调?或者我应该尝试修改DOM,并希望JavaScript能够检测到(例如DOMAttrModified) - 但这仅在少数浏览器中受支持,并且在Internet Explorer中不受支持。你能给一个跨浏览器的代码示例有效吗? – pts 2010-08-30 06:17:59
我有多个applet线程调用Javascript的并发问题。一些电话被Internet Explorer 8忽略(Firefox 3.6和Safari 5工作正常)。
我试图用DOMService.invokeAndWait打电话给Javascript - 这没有帮助。我最终确保所有的Java-> Javascript调用都来自同一个线程,并且我的问题得到了解决(至少暂时 - 我没有检查过,如果Javascript线程忙于某些用户定义的操作,发起的工作)。
序列化的呼叫,我用Executors.newSingleThreadExecutor
- 1. 从Java Applet调用Javascript函数
- 2. 如何从Java Applet调用JS函数?
- 3. 从Flex调用Java Applet
- 4. 如何在Java Applet中注册JavaScript回调?
- 5. 从Java servlet调用线程
- 6. JNI回调线程
- 7. 将javascript回调传递给使用deployJava部署的java applet
- 8. 从Java脚本调用Applet函数
- 9. 从工作线程调用主线程回调函数
- 10. java applet:哪些线程调用生命周期钩子?
- 11. 的JavaScript线程使用Ajax回调
- 12. 从其他线程回调
- 13. 从子线程回调父线程
- 14. 如何在不使用showDocument的情况下从applet调用javascript?
- 15. GWT互操作性:从GWT生成的javascript中调用java applet
- 16. 如何从JavaScript调用WebStart部署的applet函数?
- 17. 如何从unsigned Javascript中调用已签名的Java Applet执行特权操作?
- 18. 在主线程中执行JavaScript回调
- 19. 从RegisterStartupScript调用Applet函数
- 20. 从applet调用servlet?下面
- 21. 如何从JavaScript调用Java方法
- 22. 如何从javascript调用java函数?
- 23. Delegate.BeginInvoke回调阻塞调用线程?
- 24. 在ubuntu上调用javascript函数时Java applet崩溃chrome java
- 25. 从JavaScript中调用Groovy或Java程序
- 26. 线程终止时的Java ExecutorService回调
- 27. Rhino:如何从JavaScript调用的Java方法返回一个Integer?
- 28. 如何从java中的javascript调用返回数组?
- 29. 如何从非UI线程调用Snackbar.make()?
- 30. 从Java线程调用到JNI并返回到requestPermissions
但看看这里:https://jdk6.java.net/plugin2/liveconnect/ – flup 2014-01-10 15:39:34