Проблемы с доступом к классам Java из Javascript расширения Firefox

Я собираюсь разработать расширение для Firefox, которое использует некоторые классы Java. Расширение получает значение <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[]`

Например, поместив следующую строку перед вызовом основного метода:

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, обновление 13.

Где я не прав? Это возможная ошибка в движке Javascript Firefox-3.0.10 или я должен сделать что-то еще, прежде чем получить метод main(...)?


person Giancarlo    schedule 19.05.2009    source источник


Ответы (2)


вы неправильно вызываете метод using;

[parameters.getClass()]

который передает аргумент типа java.lang.Class[] в подпись, которая ожидает объект String. просто передайте объект параметров как есть.

person simon622    schedule 19.05.2009
comment
public Method getMethod(String name, Class‹?›... parameterTypes) выбрасывает NoSuchMethodException, SecurityException Думаю, он прав в этом. - person alamar; 19.05.2009
comment
теперь я получаю это исключение: InternalError: невозможно преобразовать значение JavaScript в значение Java типа java.lang.Class[] - person Giancarlo; 19.05.2009
comment
попробуйте изменить две отражающие линии на; var aStaticMethod = aClass.getMethod(main, parameters.getClass()); //получает метод main(String[] args), здесь я получаю исключение* var myJava = aStaticMethod.invoke(null, parameters); удаление инициализаторов [] , так как они уже, кажется, были созданы вызовом отражения. - person simon622; 19.05.2009
comment
новая ошибка: нет метода Java java.lang.Class.getMethod, который соответствует типам аргументов JavaScript (строка, объект). Методы-кандидаты с таким же именем: java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class[]) - person Giancarlo; 19.05.2009

предполагая, что ваше полное имя класса "your.package.Firefox", вы можете сделать:

importPackage("your.package");

args = java.lang.reflect.Array.newInstance(java.lang.String.TYPE, 1);
Firefox.main(args)
person dfa    schedule 19.05.2009
comment
как установить значение args? - person Giancarlo; 19.05.2009
comment
ReferenceError: importPackage не определен - person Giancarlo; 19.05.2009
comment
Привет, просто продолжаю комментарий DFA: Связанная информация:: developer.mozilla.org /ru/Core_JavaScript_1.5_Guide/ - person ATorras; 19.05.2009