0

我将开发一个使用一些 Java 类的 Firefox 扩展。扩展<input type="file"> 使用 Javascript 获取字段的值。

我要创建的 Java 类如下:

public class Firefox {
    public static String inFileName;
    public static void main(String[] args) throws IOException {
        inFileName = "";
        try {
            inFileName = args[0];
        } catch (Exception ex) {}
}

在 Javascript 上,我必须使用 Java 反射才能访问 Java 类。

通过这种方式,我可以创建我的 Java 对象:

var fileInput = e.explicitOriginalTarget; // is an object HTMLInputElement, I get this when a file is selected
strArray = java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.net.URL"),3);
classLoader = java.net.URLClassLoader.newInstance(strArray);
parameters = java.lang.reflect.Array.newInstance(java.lang.Class.forName("java.lang.String"),1);
parameters[0]= fileInput.value;
var aClass = java.lang.Class.forName("Firefox", true, classLoader);
var aStaticMethod = aClass.getMethod("main", [parameters.getClass()]); //gets the main(String[] args) method, here I get the exception*
var myJava = aStaticMethod.invoke(null, [parameters]); //invokes the main method

我一直在 Firefox-3.5b4 上尝试这个扩展,一切都很好,但是当我在 Firefox-3.0.10 上尝试时,我得到以下异常*:

`InternalError: Unable to convert JavaScript value class [Ljava.lang.String; to Java value of type java.lang.Class[]`

例如,将以下行放在 main 方法调用之前:

alert(parameters + "  -  " + parameters[0]);

在 Firefox-3.0.10 和 3.5b4 上,我都会收到一个警告窗口,上面写着:

`[Ljava.lang.String;@194ca6c  -  /root/demo.pdf`  //demo.pdf is the selected file

但只有在 3.0.10 上我才得到例外,只有在我的 GNU/Linux 机器上。在 Windows XP 上,我在两个 Firefox 版本上都没有问题!

请注意,在 Windows 和 Linux 上,Java 插件版本都是 6 update 13。

我哪里错了?它是 Firefox-3.0.10 Javascript 引擎上的一个可能的错误,还是在获取 main(...) 方法之前我必须做任何其他事情?

4

2 回答 2

1

假设您的完整类名是“your.package.Firefox”,您可以这样做:

importPackage("your.package");

args = java.lang.reflect.Array.newInstance(java.lang.String.TYPE, 1);
Firefox.main(args)
于 2009-05-19T08:36:57.037 回答
0

您错误地调用了使用的方法;

[parameters.getClass()]

它将 java.lang.Class[] 类型的参数传递到期望 String 对象的签名中。只需按原样传递参数对象。

于 2009-05-19T08:34:04.907 回答