簡體   English   中英

如何從Java applet線程調用JavaScript回調?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM