[英]How to call a JavaScript callback from a Java applet thread?
我在一個由Java applet啟動的線程中運行了一些長時間運行的Java代碼。 代碼完成后,它就會為用戶提供信息。 我想以線程安全的方式將此信息傳遞給JavaScript回調。 僅使用Java DOM API來修改HTML文檔是不夠的,除非我的JavaScript回調以線程安全的方式被調用為副作用(即最終,在執行JavaScript回調的同一瀏覽器線程中)。 我該如何實現呢? 圖書館已經在做了嗎?
看起來好像您需要Common DOM API。 本質上,您請求DOMService在主UI空間線程良好且准備就緒時回調您。
http://docs.oracle.com/javase/1.5.0/docs/guide/plugin/developer_guide/java_js.html
據我所知,JSObject是“舊方式”,而Common DOM API是更新的方式(從Java 6開始)。 你需要做的是調用applet的方法並傳遞你想要回調的函數對象。 然后,您的applet從DOMAction中調用該函數對象。
我沒有代碼向您展示,這不是我在使用Java之前所做的事情。 但是我使用了一個用C ++編寫的NPAPI web插件的類似技術,即JS調用我的C ++對象將函數作為參數傳遞,然后在稍后階段,讓C ++對象調用JS函數。 '希望這會有所幫助。
我有多個applet線程調用Javascript的並發問題。 Internet Explorer 8忽略了一些調用(Firefox 3.6和Safari 5工作正常)。
我試圖用DOMService.invokeAndWait包裝對Javascript的調用 - 這沒有幫助。
我最終確保所有Java-> Javascript調用都來自同一個線程,並且我的問題得到了解決(至少暫時 - 我還沒有檢查如果Javascript線程忙於某些用戶啟動的工作會發生什么)。
為了序列化調用,我使用了Executors.newSingleThreadExecutor
似乎沒有公共教程如何做到這一點。 整個JavaScript-Java接口未被記錄,並且受瀏覽器限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.