我有一個Java小程序上的WebP齡期,我試圖用Javascript代碼。從Java Applet調用方法與JavaScript返回[Ljava.lang.String; @ 7ac79dfa
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小程序屏幕和,如果我打電話
document.getElementById('webCaptureApplet');
我可以alert()
物體並接收響應[object HTMLEmbedElement]
太好了。現在,當我嘗試執行下面的代碼:當我附上一個斷點到含有for()
線
var applet = document.getElementById('webCaptureApplet');
var devices = applet.getSourceDeviceNames();
for(var i = 0; i < devices.length; i++) {
alert(devices[i]);
}
並檢查與螢火蟲對象,的devices
的toString()
值爲[Ljava.lang.String; @ 1d0b3465 。我認爲這是有道理的,因爲數組正在傳回,並且它不是友好的,因爲它顯示了一個簡單的值。
當我看到在福爾環devices.length
,顯示的值是一個public netscape.javascript.JSException(java.lang.String, java.lang.String, int, java.lang.String, int)
的方法存根我看過無數的如何是於JavaScript調用Java,我不能看到我已經錯了什麼似乎是非常無縫的互操作。
我應該說在某一時刻它通過OS X上的Firefox工作,但它堅持一個緩存的小程序,所以我很困惑問題在那裏。我嘗試刪除我的工作站和筆記本電腦上的緩存,但他們似乎仍然堅持使用舊罐。我不知道這對我有多影響。
這似乎是,如果我的小程序的getSourceDeviceNames
返回一個字符串或字符串數組沒有什麼差別。它在檢查時仍會顯示相同的錯誤。我不確定緩存是否有影響。
謝謝,我感謝您提供的鏈接中的資源。我明白你對原始類型的看法,並且我可能無法以我的代碼示例中表示的方式通過索引來訪問JavaArray。 但是,該代碼塊沒有被達到。我仍然接受表面支持的程序問題。 (長度是JavaArray的只讀屬性)。這在實例化上失敗,並且沒有與該對象一起工作。 – Brian