[英]Calling method from Java Applet with Javascript returning [Ljava.lang.String;@7ac79dfa
我有一個Webp時代的Java小程序,我試圖用Javascript進行編程。
public class WebCapture extends Applet {
public String[] getSourceDeviceNames() {
return new String[] {'Device 1', 'Device 2'};
}
public void acquireImage() {
//...
}
}
我將此小程序和支持庫編譯為jar文件,它包含在我的HTML頁面中,如下所示:
<embed id="webCaptureApplet"
code="com.brian.webcapture.applets.WebCapture"
archive="jar/WebCapture.jar"
type="application/x-java-applet">
<noembed>
Oops! It looks like Java is not installed. =[
</noembed>
</embed>
這似乎是有效的,我在屏幕上看到一個空白的Java applet,如果我調用
document.getElementById('webCaptureApplet');
我可以alert()
對象並收到響應[object HTMLEmbedElement]
大。 現在,當我嘗試執行以下代碼時:
var applet = document.getElementById('webCaptureApplet');
var devices = applet.getSourceDeviceNames();
for(var i = 0; i < devices.length; i++) {
alert(devices[i]);
}
當我附上一個斷點到包含線for()
並檢查與螢火蟲上述目的, toString()
的值devices
是[Ljava.lang.String; @ 1d0b3465。 我認為這是有道理的,因為將數組傳回,並且toString()
不友好,無法顯示簡單的值。
當我在foor循環中查看devices.length
時,顯示的值是public netscape.javascript.JSException(java.lang.String, java.lang.String, int, java.lang.String, int)
的方法存根。
我已經讀了無數關於如何調用Java的Java腳本的方法,但我看不出似乎無縫互操作的地方出了問題。
我應該說,它曾經在OS X上通過Firefox運行,但是它一直保留在緩存的applet上,所以我很困惑問題所在。 我試圖刪除我的工作站和筆記本電腦上的緩存,但它們似乎仍然緊貼舊的瓶子。 我不確定這對我有多大影響。
如果我的小程序的getSourceDeviceNames
返回一個字符串或字符串數組,似乎沒有什么區別。 在檢查時仍會顯示相同的錯誤。 我不確定緩存是否會影響到這一點。
根據http://www.uow.edu.au/~hasan/buss930/jscript/packages.htm#1014128 “ Java數組是由理解了array.length和array [index]的JavaScript對象包裝的。” 可以在Sun Java上正常工作,但是在OpenJDK上運行時返回JSException。
我唯一能找到的方法是計算數組的元素。
var length = 0;
while(array[length])
length++;
看來,此功能在OpenJDK中有問題。
您對這里的數組感到困惑。 當您從javascript調用Java代碼時,簡單類型會自然映射,而其他類型可能會引起一些問題。 例如,數組映射到JavaArray
(http://www.nusphere.com/kb/jscoreguide/lc.html)。
我為您進行了簡短的搜索,但沒有找到如何從JavaScript端從數組中提取元素的方法。 歡迎您繼續搜索,但如果可以修改applet的代碼,可能更好的方法是公開方法getSourceDeviceName(int index)
,該方法將返回然后返回設備#i的名稱和getNumberOfSourceDeviceNames()
來返回數組長度。
與實時連接相比,使用原語總是比其他類型更容易且更可移植。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.