我在 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 小程序呈现在屏幕上,如果我调用
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()
并使用 firebug 检查对象的行时,toString()
值为devices
[Ljava.lang.String;@1d0b3465。我认为这是有道理的,因为数组正在被传回,并且toString()
对于显示简单的值并不友好。
当我devices.length
在 foo 循环中查看时,显示的值是 a 的方法存根public netscape.javascript.JSException(java.lang.String, java.lang.String, int, java.lang.String, int)
我已经阅读了无数关于 Javascript 调用 Java 的操作方法,但我看不出我在似乎非常无缝的互操作方面出了什么问题。
我应该说它曾在 OS X 上通过 Firefox 运行,但它保留了一个缓存的小程序,所以我很困惑问题出在哪里。我曾尝试删除工作站和笔记本电脑上的缓存,但它们似乎仍然粘在旧罐子上。我不确定这对我有多大影响。
getSourceDeviceNames
如果我的小程序返回一个字符串或一个字符串数组,这似乎没有什么区别。它仍然会在检查时显示相同的错误。我不确定缓存是否会影响这一点。