gpt4 book ai didi

java - 使用 Javascript 从 Java Applet 调用方法返回 [Ljava.lang.String;@7ac79dfa

转载 作者:行者123 更新时间:2023-11-30 11:44:49 26 4
gpt4 key购买 nike

我在 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() 的行并使用 firebug 检查对象时,devicestoString() 值是 [Ljava.lang.String;@1d0b3465。我认为这是有道理的,因为一个数组正在被传回,并且 toString() 不适合显示简单值。

当我查看 foor 循环中的 devices.length 时,显示的值是 public netscape.javascript.JSException(java.lang.String, java.lang .String, int, java.lang.String, int)

我已经阅读了无数关于如何调用 Java 的 Javascript 的内容,但我看不出我在看似非常无缝的互操作方面出了什么问题。

我应该说它曾在 OS X 上通过 Firefox 工作,但它保留了一个缓存的小程序,所以我很困惑那里的问题是什么。我已经尝试删除工作站和笔记本电脑上的缓存,但它们似乎仍然保留在旧 jar 上。我不确定这对我有多大影响。

如果我的小程序的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 中是有问题的。

关于java - 使用 Javascript 从 Java Applet 调用方法返回 [Ljava.lang.String;@7ac79dfa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10601324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com